From: Jean-Marc V. <jm...@us...> - 2004-07-10 15:15:05
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/collections In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7469/src/org/exist/collections Modified Files: Collection.java Log Message: Refactoring: extract method: private DocumentImpl determineTreeStructure(DBBroker broker, String name, DocumentImpl document, DocumentImpl oldDoc, XMLReader reader, InputSource source) Index: Collection.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/collections/Collection.java,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** Collection.java 10 Jul 2004 13:57:15 -0000 1.38 --- Collection.java 10 Jul 2004 15:14:55 -0000 1.39 *************** *** 713,721 **** XMLReader reader; InputSource source = new InputSource(new StringReader(data)); try { ! oldDoc = checkPermissions(broker, name); - document = new DocumentImpl(broker, name, this); manageDocumentInformation(broker, name, oldDoc, document ); --- 713,775 ---- XMLReader reader; InputSource source = new InputSource(new StringReader(data)); + oldDoc = getDocument(broker, name); + document = new DocumentImpl(broker, name, this); + reader = getReader(broker); + // first pass: parse the document to determine tree structure + document = determineTreeStructure(broker, name, document, oldDoc, reader, source); + + // reset the input source + source = new InputSource(new StringReader(data)); + + // second pass: store the document + LOG.debug("storing document " + document.getDocId() + " ..."); try { ! try { ! reader.parse(source); ! } catch (IOException e) { ! throw new EXistException(e); ! } ! ! if(oldDoc == null) ! addDocument(broker, document); ! // broker.checkTree(document); ! broker.addDocument(this, document); ! broker.closeDocument(); ! broker.flush(); ! LOG.debug("document stored."); ! // if we are running in privileged mode (e.g. backup/restore) ! // notify the SecurityManager about changes ! if (getName().equals(SecurityManager.SYSTEM) && document.getFileName().equals(SecurityManager.ACL_FILE) ! && privileged == false) { ! // inform the security manager that system data has changed ! LOG.debug("users.xml changed"); ! broker.getBrokerPool().reloadSecurityManager(broker); ! } ! } finally { ! document.getUpdateLock().release(Lock.WRITE_LOCK); ! } ! broker.deleteObservers(); ! return document; ! } ! ! /** ! * @param broker ! * @param name ! * @param document ! * @param oldDoc ! * @param reader ! * @param source ! * @return ! * @throws LockException ! * @throws EXistException ! * @throws SAXException ! * @throws PermissionDeniedException ! * @throws TriggerException ! */ ! private DocumentImpl determineTreeStructure(DBBroker broker, String name, DocumentImpl document, DocumentImpl oldDoc, XMLReader reader, InputSource source) throws LockException, EXistException, SAXException, PermissionDeniedException, TriggerException { ! try { ! checkPermissions(broker, name, oldDoc); manageDocumentInformation(broker, name, oldDoc, document ); *************** *** 725,729 **** addObserversToIndexer(broker, indexer); ! reader = prepareSAXParser(broker, name, oldDoc, trigger, indexer); // first pass: parse the document to determine tree structure --- 779,783 ---- addObserversToIndexer(broker, indexer); ! prepareSAXParser(broker, name, oldDoc, trigger, indexer, reader ); // first pass: parse the document to determine tree structure *************** *** 770,805 **** lock.release(); } - - // reset the input source - source = new InputSource(new StringReader(data)); - - // second pass: store the document - LOG.debug("storing document " + document.getDocId() + " ..."); - try { - try { - reader.parse(source); - } catch (IOException e) { - throw new EXistException(e); - } - - if(oldDoc == null) - addDocument(broker, document); - // broker.checkTree(document); - broker.addDocument(this, document); - broker.closeDocument(); - broker.flush(); - LOG.debug("document stored."); - // if we are running in privileged mode (e.g. backup/restore) - // notify the SecurityManager about changes - if (getName().equals(SecurityManager.SYSTEM) && document.getFileName().equals(SecurityManager.ACL_FILE) - && privileged == false) { - // inform the security manager that system data has changed - LOG.debug("users.xml changed"); - broker.getBrokerPool().reloadSecurityManager(broker); - } - } finally { - document.getUpdateLock().release(Lock.WRITE_LOCK); - } - broker.deleteObservers(); return document; } --- 824,827 ---- *************** *** 811,815 **** * @param trigger * @param indexer ! * @return * @throws EXistException * @throws SAXException --- 833,837 ---- * @param trigger * @param indexer ! * @param reader the real source of the XML data * @throws EXistException * @throws SAXException *************** *** 818,825 **** * @throws TriggerException */ ! private XMLReader prepareSAXParser(DBBroker broker, String name, DocumentImpl oldDoc, Trigger trigger, Indexer indexer) throws EXistException, SAXException, SAXNotRecognizedException, SAXNotSupportedException, TriggerException { ! XMLReader reader; indexer.setValidating(true); ! reader = getReader(broker); reader.setEntityResolver(this); --- 840,848 ---- * @throws TriggerException */ ! private void prepareSAXParser(DBBroker broker, String name, DocumentImpl oldDoc, ! Trigger trigger, Indexer indexer, XMLReader reader) throws EXistException, SAXException, SAXNotRecognizedException, SAXNotSupportedException, TriggerException { ! //XMLReader reader; indexer.setValidating(true); ! // reader = getReader(broker); reader.setEntityResolver(this); *************** *** 844,848 **** } reader.setErrorHandler(indexer); ! return reader; } --- 867,871 ---- } reader.setErrorHandler(indexer); ! //return reader; } *************** *** 886,897 **** * @param broker * @param name ! * @return * @throws LockException * @throws PermissionDeniedException */ ! private DocumentImpl checkPermissions(DBBroker broker, String name) throws LockException, PermissionDeniedException { ! DocumentImpl oldDoc = null; lock.acquire(Lock.WRITE_LOCK); ! if (hasDocument(name) && (oldDoc = getDocument(broker, name)) != null) { // jmv: Note: this was only in addDocument(DBBroker broker, String name, String data,) --- 909,919 ---- * @param broker * @param name ! * @param oldDoc old Document existing in database prior to adding a new one with same name. * @throws LockException * @throws PermissionDeniedException */ ! private void checkPermissions(DBBroker broker, String name, DocumentImpl oldDoc) throws LockException, PermissionDeniedException { lock.acquire(Lock.WRITE_LOCK); ! if (hasDocument(name) && (oldDoc ) != null) { // jmv: Note: this was only in addDocument(DBBroker broker, String name, String data,) *************** *** 924,928 **** throw new PermissionDeniedException( "Not allowed to write to collection " + getName()); - return oldDoc; } --- 946,949 ---- *************** *** 941,1000 **** DocumentImpl document = null, oldDoc = null; XMLReader reader; ! try { ! oldDoc = checkPermissions(broker, name); ! ! document = new DocumentImpl(broker, name, this); ! manageDocumentInformation(broker, name, oldDoc, document ); ! ! Trigger trigger = setupTriggers(broker, name, oldDoc); ! Indexer indexer = new Indexer(broker); ! indexer.setDocument(document); ! ! addObserversToIndexer(broker, indexer); ! ! reader = prepareSAXParser(broker, name, oldDoc, trigger, indexer); ! ! // first pass: parse the document to determine tree structure ! LOG.debug("validating document " + name); ! try { ! reader.parse(source); ! } catch (IOException e) { ! throw new EXistException(e); ! } ! document.setMaxDepth(document.getMaxDepth() + 1);//ddddddddddddddddddddddddddddddd ! document.calculateTreeLevelStartPoints(); ! // new document is valid: remove old document ! if (oldDoc != null) { ! LOG.debug("removing old document " + oldDoc.getFileName()); ! if (oldDoc.getResourceType() == DocumentImpl.BINARY_FILE) ! broker.removeBinaryResource((BinaryDocument) oldDoc); ! else ! broker.removeDocument(getName() + '/' + oldDoc.getFileName(), false); ! oldDoc.copyOf(document); ! indexer.setDocumentObject(oldDoc); ! document = oldDoc; ! } else { ! document.getUpdateLock().acquire(Lock.WRITE_LOCK); ! document.setDocId(broker.getNextDocId(this)); ! } ! indexer.setValidating(false); ! if (trigger != null) ! trigger.setValidating(false); ! } catch(EXistException e) { ! if(oldDoc != null) oldDoc.getUpdateLock().release(Lock.WRITE_LOCK); ! throw e; ! } catch(SAXException e) { ! if(oldDoc != null) oldDoc.getUpdateLock().release(Lock.WRITE_LOCK); ! throw e; ! } catch(PermissionDeniedException e) { ! if(oldDoc != null) oldDoc.getUpdateLock().release(Lock.WRITE_LOCK); ! throw e; ! } catch(TriggerException e) { ! if(oldDoc != null) oldDoc.getUpdateLock().release(Lock.WRITE_LOCK); ! throw e; ! } finally { ! lock.release(); ! }//ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff // reset the input source --- 962,971 ---- DocumentImpl document = null, oldDoc = null; XMLReader reader; ! oldDoc = getDocument(broker, name); ! document = new DocumentImpl(broker, name, this); ! reader = getReader(broker); ! // first pass: parse the document to determine tree structure ! document = determineTreeStructure(broker, name, document, oldDoc, reader, source); // reset the input source *************** *** 1056,1064 **** DocumentImpl document, oldDoc = null; DOMStreamer streamer; try { - oldDoc = checkPermissions(broker, name); - - document = new DocumentImpl(broker, name, this); manageDocumentInformation(broker, name, oldDoc, document ); --- 1027,1036 ---- DocumentImpl document, oldDoc = null; DOMStreamer streamer; + oldDoc = getDocument(broker, name); + document = new DocumentImpl(broker, name, this); + try { + checkPermissions(broker, name, oldDoc); manageDocumentInformation(broker, name, oldDoc, document ); *************** *** 1180,1188 **** throw new PermissionDeniedException("Database is read-only"); BinaryDocument blob = null; try { ! ! DocumentImpl oldDoc = checkPermissions(broker, name); ! ! blob = new BinaryDocument(broker, name, this); manageDocumentInformation(broker, name, oldDoc, blob ); --- 1152,1159 ---- throw new PermissionDeniedException("Database is read-only"); BinaryDocument blob = null; + DocumentImpl oldDoc = getDocument(broker, name); + blob = new BinaryDocument(broker, name, this); try { ! checkPermissions(broker, name, oldDoc); manageDocumentInformation(broker, name, oldDoc, blob ); |