Changeset 4779


Ignore:
Timestamp:
12/01/09 09:55:43 (11 years ago)
Author:
cbyrom
Message:

Add new input to editor - to allow choice of publication state of the
atom doc. Ensure this state is maintained by including additional
lookups of collection info when retrieving atoms (NB, the state is
represented by the collection the doc is stored in - not its content).
Generalise method to get eXist client and put this in the Utilities
module for general re-use.

Location:
MILK/trunk/milk_server/milk_server
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/atomeditorcontroller.py

    r4724 r4779  
    1313from milk_server.lib.ndgInterface import ndgInterface  
    1414from formencode import htmlfill 
     15from milk_server.lib import Utilities 
    1516    
    1617class AtomEditorController(BaseController): 
     
    6768        if not self.inputs: 
    6869            self.inputs = self.__getTidyInputs() 
    69          
     70             
    7071        c.atom = Atom(xmlString=str(x), ndgObject = self.ndgObject, **dict(self.inputs)) 
     72 
     73        # lookup the atom publication state 
     74        edc = Utilities.getExistClient(c.atom.ME.providerID) 
     75        c.atom.state = edc.getAtomPublicationState(c.atom.datasetID) 
    7176         
    7277        # save the current atom - to avoid this needing be recreated by the  
     
    9297        logging.debug("Pickleable data extracted") 
    9398        return tidyInputs 
    94  
    9599 
    96100 
     
    148152 
    149153 
    150     def _getExistClient(self, providerID): 
    151         ''' 
    152         Use the config data to set up and return an eXist client 
    153         ''' 
    154         logging.info("Setting up eXist client to provider, '%s'" %providerID) 
    155         # firstly check if there is a current connection available 
    156         eXistClient = g.eXistDBCons.get(providerID) 
    157         if eXistClient: 
    158             logging.info("- found existing client to provider - returning this") 
    159             return eXistClient 
    160          
    161         # lookup the eXist DB to use according to the provider ID for the  
    162         # data - NB, this is specified in the milk.config file 
    163         if not hasattr(self, 'cf'): 
    164             self._setup() 
    165  
    166         existHost = self.cf.get('NDG_EXIST', providerID) 
    167         configFile = self.cf.get('NDG_EXIST','passwordFile') 
    168         eXistClient = edc.eXistDBClient(eXistDBHostname = existHost, \ 
    169                                        configFile = configFile) 
    170         # add the client to the global variables for re-use 
    171         g.eXistDBCons[providerID] = eXistClient 
    172         logging.info("Returning eXist client") 
    173         return eXistClient 
    174  
    175  
    176154    def savePageAndRender(self, template, **inputs): 
    177155        ''' 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/editatom.py

    r4756 r4779  
    1313from milk_server.models.form import * 
    1414from milk_server.lib import mailer 
    15 import milk_server.lib.htmlUtilities as utils 
     15import ndgUtils.lib.htmlUtilities as utils 
    1616from ndgUtils.models.Atom import Atom, Person, Link, Category 
     17from ndgUtils.models import AtomState 
    1718from ndgUtils.lib.atomvalidator import ValidationError 
    1819import ndgUtils.lib.existdbclient as edc 
     
    2324from editorconstants import * 
    2425from atomeditorcontroller import AtomEditorController 
     26from milk_server.lib import Utilities 
    2527 
    2628class EditatomController(AtomEditorController): 
     
    9496                # data or just the CSML/CDML data 
    9597                # NB, we'll be creating the atom in the default local eXist 
    96                 eXistClient = self._getExistClient('local') 
     98                eXistClient = Utilities.getExistClient('local') 
    9799                gran = granulite(fileContents, granuleAtom = c.atom, \ 
    98100                                 eXistClient = eXistClient, \ 
     
    180182            return self._handleError(e) 
    181183         
     184        # variable to hold publication state changes 
     185        newState = None 
     186         
    182187        # save atom association changes 
    183188        if int(saveLevel) == self.ADD_ASSOCIATIONS: 
     
    204209                        self.inputs.get('subtype')) 
    205210                c.atom.subtypeID = c.atom.subtype.split('/')[-1] 
     211             
     212            if self.inputs.get('publication_state'): 
     213                newState = AtomState.getAtomState(self.inputs['publication_state']) 
    206214 
    207215        logging.info("Validating input") 
     
    210218            g.validator.validateAtom() 
    211219            logging.info("- input valid") 
    212  
    213             self.saveAtomToExist(c.atom) 
     220             
     221            # if a change of state has been specified,  
     222 
     223            self.saveAtomToExist(c.atom, newState = newState) 
    214224        except Exception, e: 
    215225            self._unpackErrors(e) 
     
    274284        c.subTypes = utils.getVocabTermDataDropdown(listVals, \ 
    275285                                        selected=c.atom.subtype) 
     286         
     287        c.states = h.options_for_select(AtomState.selectList, c.atom.state.stateFlag) 
     288        self.inputs['publication_state'] = c.atom.state.stateFlag 
     289         
    276290        self.__setDropDownSelectVal('subtype', c.atom.subtype, listVals) 
    277291        self.addRelatedLinksDropDowns() 
     
    307321                logging.info("Deleting atom, '%s'" %uri) 
    308322                self._setup(uri) 
    309                 eXistClient = self._getExistClient(c.atom.ME.providerID) 
     323                eXistClient = Utilities.getExistClient(c.atom.ME.providerID) 
    310324                gran = granulite(None, granuleAtom = c.atom, \ 
    311325                                 eXistClient = eXistClient, \ 
     
    549563 
    550564 
    551     def saveAtomToExist(self, atom): 
     565    def saveAtomToExist(self, atom, newState = None): 
    552566        ''' 
    553567        Save the specified atom in eXist 
    554568        @param atom: atom object to save to eXist 
     569        @keyword newState:  AtomState publication state to move the atom to, default: None 
     570        - use the current atom state 
    555571        @return atom: atom object saved in eXist 
    556572        ''' 
    557573        logging.info("Saving changes to eXist") 
    558         eXist = self._getExistClient(atom.ME.providerID) 
    559         createdAtom = eXist.createAtomInExist(atom) 
     574        eXist = Utilities.getExistClient(atom.ME.providerID) 
     575         
     576        if newState and newState != atom.state: 
     577            createdAtom = eXist.changeAtomPublicationStateInExist(atom, newState) 
     578        else: 
     579            createdAtom = eXist.createAtomInExist(atom) 
    560580        logging.info("Changes successfully saved to eXist") 
    561581        return createdAtom 
  • MILK/trunk/milk_server/milk_server/controllers/atom_editor/listatom.py

    r4724 r4779  
    1212from milk_server.lib.base import * 
    1313from editorconstants import * 
    14 import milk_server.lib.htmlUtilities as utils 
     14import ndgUtils.lib.htmlUtilities as utils 
    1515from atomeditorcontroller import AtomEditorController 
    1616    
  • MILK/trunk/milk_server/milk_server/controllers/browse/retrieve.py

    r4668 r4779  
    1212from ndgUtils.models.vocabtermdata import VocabTermData as VTD 
    1313from ndgUtils import DocumentRetrieve 
     14from milk_server.lib import Utilities 
    1415 
    1516class RetrieveController(BaseController): 
     
    185186                c.xmlh=x 
    186187                c.atom = Atom(xmlString=str(x), ndgObject = self.uri) 
     188                 
     189                # get the current publication state 
     190                edc = Utilities.getExistClient(c.atom.ME.providerID) 
     191                c.atom.state = edc.getAtomPublicationState(c.atom.datasetID) 
     192                 
    187193                c.title = 'Viewing [%s]'%self.uri 
    188194                c.deploymentsURL = h.url_for(controller='browse/retrieve', \ 
     
    212218                c.tab='Details' 
    213219                 
    214             elif viewFormat == ndgObject.DIF_DOC_TYPE: 
     220            elif viewFormat == ndgObject.DIF_DOC_TYPE or viewFormat == ndgObject.BROWSE_DIF_DOC_TYPE: 
    215221                renderTemplate = 'browse/dif' 
    216222                c.doc=DIF.DIF(x.tree,et=1,ndgObj=self.uri) 
  • MILK/trunk/milk_server/milk_server/lib/Utilities.py

    r4487 r4779  
    11import urllib, logging 
     2from milk_server.lib.base import * 
     3import ndgUtils.lib.existdbclient as edc 
     4 
     5def getExistClient(providerID): 
     6    ''' 
     7    Use the config data to set up and return an eXist client 
     8    ''' 
     9    logging.info("Setting up eXist client to provider, '%s'" %providerID) 
     10    # firstly check if there is a current connection available 
     11    eXistClient = g.eXistDBCons.get(providerID) 
     12    if eXistClient: 
     13        logging.info("- found existing client to provider - returning this") 
     14        return eXistClient 
     15 
     16    existHost = request.environ['ndgConfig'].get('NDG_EXIST', providerID) 
     17    configFile = request.environ['ndgConfig'].get('NDG_EXIST','passwordFile') 
     18    eXistClient = edc.eXistDBClient(eXistDBHostname = existHost, \ 
     19                                   configFile = configFile) 
     20    # add the client to the global variables for re-use 
     21    g.eXistDBCons[providerID] = eXistClient 
     22    logging.info("Returning eXist client") 
     23    return eXistClient 
    224 
    325def recreateListFromUnicode(string): 
  • MILK/trunk/milk_server/milk_server/templates/atom_editor/atom_functions.html

    r4729 r4779  
    188188                            </tr> 
    189189                            <span py:if="not c.atom.isDeployment() and not c.atom.isGranule()" py:strip=""> 
    190                             <tr py:if="not editLink"> 
    191                         <td class="cellhead">Type:</td> 
    192                         <td class="column"> 
    193                                 ${Markup(c.atom.atomTypeName)} 
     190                                    <tr py:if="not editLink"> 
     191                                <td class="cellhead">Type:</td> 
     192                                <td class="column"> 
     193                                        ${Markup(c.atom.atomTypeName)} 
     194                                </td> 
     195                                </tr> 
     196                                    <span py:if="len(c.subTypes) &gt; 0" py:strip=""> 
     197                                            <tr> 
     198                                        <td class="cellhead">Sub-Type:</td> 
     199                                        <td py:if="editLink" class="column"> 
     200                                                ${Markup(h.select('subtype',option_tags=c.subTypes))} 
     201                                        </td> 
     202                                        <td py:if="not editLink" class="column"> 
     203                                                ${Markup(g.vtd.tidySubTypeTitle(c.atom.subtypeID))} 
     204                                        </td> 
     205                                        </tr> 
     206                                </span> 
     207                                <tr py:if="not c.atom.isDeployment()"> 
     208                                <td class="cellhead" width="10%">Abbreviation:</td> 
     209                                <td py:if="editLink" class="column"> 
     210                                        ${Markup(h.text_field('abbreviation',c.atom.ME.abbreviation))} 
     211                                </td> 
     212                                <td py:if="not editLink" class="column"> 
     213                                        ${Markup(c.atom.ME.abbreviation or "")} 
     214                                </td> 
     215                                    </tr> 
     216                            </span> 
     217                            <tr> 
     218                        <td class="cellhead">Publication State:</td> 
     219                        <td py:if="editLink" class="column"> 
     220                                ${Markup(h.select('publication_state',option_tags=c.states))} 
     221                        </td> 
     222                        <td py:if="not editLink" class="column"> 
     223                                ${Markup(c.atom.state.title)} 
    194224                        </td> 
    195225                        </tr> 
    196                             <span py:if="len(c.subTypes) &gt; 0" py:strip=""> 
    197                             <tr> 
    198                         <td class="cellhead">Sub-Type:</td> 
    199                         <td py:if="editLink" class="column"> 
    200                                 ${Markup(h.select('subtype',option_tags=c.subTypes))} 
    201                         </td> 
    202                         <td py:if="not editLink" class="column"> 
    203                                 ${Markup(g.vtd.tidySubTypeTitle(c.atom.subtypeID))} 
    204                         </td> 
    205                         </tr> 
    206                         </span> 
    207                         <tr py:if="not c.atom.isDeployment()"> 
    208                         <td class="cellhead" width="10%">Abbreviation:</td> 
    209                         <td py:if="editLink" class="column"> 
    210                                 ${Markup(h.text_field('abbreviation',c.atom.ME.abbreviation))} 
    211                         </td> 
    212                         <td py:if="not editLink" class="column"> 
    213                                 ${Markup(c.atom.ME.abbreviation or "")} 
    214                         </td> 
    215                             </tr> 
    216                             </span> 
    217226                         <tr> 
    218227                        <td></td> 
  • MILK/trunk/milk_server/milk_server/tests/functional/test_listatom.py

    r4668 r4779  
    1919from ndgutilstests.testutils import testUtils as tu 
    2020from milk_server.controllers.atom_editor.editorconstants import * 
    21 import milk_server.lib.htmlUtilities as utils 
     21import ndgUtils.lib.lib.htmlUtilities as utils 
    2222from ndgUtils.models.vocabtermdata import VocabTermData as VTD 
    2323 
Note: See TracChangeset for help on using the changeset viewer.