tdraier     2005/12/21 14:39:29 CET

  Modified files:
    core/src/java/org/jahia/services/importexport 
                                                  ImportHandler.java 
  Log:
  -fixed npe at end of import
  -use of get/setProperty
  -added optional version attribute
  
  Revision  Changes    Path
  1.56      +140 -137  
jahia/core/src/java/org/jahia/services/importexport/ImportHandler.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/importexport/ImportHandler.java.diff?r1=1.55&r2=1.56&f=h
  
  
  
  Index: ImportHandler.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/importexport/ImportHandler.java,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- ImportHandler.java        15 Dec 2005 16:30:46 -0000      1.55
  +++ ImportHandler.java        21 Dec 2005 13:39:29 -0000      1.56
  @@ -201,141 +201,157 @@
   //            transactionTemplate.execute(new 
TransactionCallbackWithoutResult() {
   //                protected void 
doInTransactionWithoutResult(TransactionStatus status) {
   //                    try {
  -                        String uuid = 
atts.getValue(ImportExportBaseService.JCR_URI, "uuid");
  +            String uuid = atts.getValue(ImportExportBaseService.JCR_URI, 
"uuid");
   
  -                        String diff = 
atts.getValue(ImportExportBaseService.JAHIA_URI, "diff");
  -                        int op = VersioningDifferenceStatus.ADDED;
  -                        if ("unchanged".equals(diff)) {
  -                            op = VersioningDifferenceStatus.UNCHANGED;
  -                        } else if ("added".equals(diff)) {
  -                            op = VersioningDifferenceStatus.ADDED;
  -                        } else if ("updated".equals(diff)) {
  -                            op = VersioningDifferenceStatus.TO_BE_UPDATED;
  -                        } else if ("removed".equals(diff)) {
  -                            op = VersioningDifferenceStatus.TO_BE_REMOVED;
  -                        }
  -                        if (updateOnly) {
  -                            op = VersioningDifferenceStatus.TO_BE_UPDATED;
  -                        }
  -                        logger.info("diff = " + diff);
  -                        if (op == VersioningDifferenceStatus.ADDED) {
  -                            boolean top = false;
  -                            if (objects.empty()) {
  -                                objects.push(currentObject);
  -                                top = true;
  -                            }
  -                            ContentObject parent = (ContentObject) 
objects.peek();
  -                            if (parent != null) {
  -                                currentObject = createObject(parent, 
namespaceURI, localName, atts);
  -                            }
  -                            if (top) {
  -                                topObjectWithAclChanged = currentObject;
  -                                topAcl = 
atts.getValue(ImportExportBaseService.JAHIA_URI, "acl");
  -                                JahiaBaseACL acl = currentObject.getACL();
  -                                acl.setInheritance(1);
  -                                acl.removeAllUserEntries();
  -                                acl.removeAllGroupEntries();
  -                            }
  +            String diff = atts.getValue(ImportExportBaseService.JAHIA_URI, 
"diff");
  +            int op = VersioningDifferenceStatus.ADDED;
  +            if ("unchanged".equals(diff)) {
  +                op = VersioningDifferenceStatus.UNCHANGED;
  +            } else if ("added".equals(diff)) {
  +                op = VersioningDifferenceStatus.ADDED;
  +            } else if ("updated".equals(diff)) {
  +                op = VersioningDifferenceStatus.TO_BE_UPDATED;
  +            } else if ("removed".equals(diff)) {
  +                op = VersioningDifferenceStatus.TO_BE_REMOVED;
  +            }
  +            if (updateOnly) {
  +                op = VersioningDifferenceStatus.TO_BE_UPDATED;
  +            }
  +            logger.info("diff = " + diff);
  +            if (op == VersioningDifferenceStatus.ADDED) {
  +                boolean top = false;
  +                if (objects.empty()) {
  +                    objects.push(currentObject);
  +                    top = true;
  +                }
  +                ContentObject parent = (ContentObject) objects.peek();
  +                if (parent != null) {
  +                    currentObject = createObject(parent, namespaceURI, 
localName, atts);
  +                }
  +                if (top) {
  +                    topObjectWithAclChanged = currentObject;
  +                    topAcl = 
atts.getValue(ImportExportBaseService.JAHIA_URI, "acl");
  +                    JahiaBaseACL acl = currentObject.getACL();
  +                    acl.setInheritance(1);
  +                    acl.removeAllUserEntries();
  +                    acl.removeAllGroupEntries();
  +                }
  +            } else {
  +                if (currentObject == null) {
  +                    ContentObject parent = (ContentObject) objects.peek();
  +                    if (parent instanceof ContentPage || parent instanceof 
ContentContainer) {
  +                        int containerID = 0;
  +                        int pageID;
  +                        if (parent instanceof ContentContainer) {
  +                            containerID = parent.getID();
  +                            pageID = ((ContentContainer) parent).getPageID();
                           } else {
  -                            if (currentObject == null) {
  -                                ContentObject parent = (ContentObject) 
objects.peek();
  -                                if (parent instanceof ContentPage || parent 
instanceof ContentContainer) {
  -                                    int containerID = 0;
  -                                    int pageID;
  -                                    if (parent instanceof ContentContainer) {
  -                                        containerID = parent.getID();
  -                                        pageID = ((ContentContainer) 
parent).getPageID();
  -                                    } else {
  -                                        pageID = parent.getID();
  -                                    }
  -                                    currentObject = 
getOrCreateContainerListOrField(localName, namespaceURI, atts, parent, pageID, 
containerID);
  -                                } else if (parent instanceof 
ContentContainerList) {
  -                                    // Container inside a list
  -                                    List l = 
parent.getChilds(jParams.getUser(), elr, jParams.getOperationMode());
  -
  -                                    Integer iIndex = (Integer) 
containerIndex.get(parent);
  -                                    if (iIndex == null) {
  -                                        iIndex = new Integer(0);
  -                                        containerIndex.put(parent, iIndex);
  -                                    }
  +                            pageID = parent.getID();
  +                        }
  +                        currentObject = 
getOrCreateContainerListOrField(localName, namespaceURI, atts, parent, pageID, 
containerID);
  +                    } else if (parent instanceof ContentContainerList) {
  +                        // Container inside a list
  +                        List l = parent.getChilds(jParams.getUser(), elr, 
jParams.getOperationMode());
  +
  +                        Integer iIndex = (Integer) 
containerIndex.get(parent);
  +                        if (iIndex == null) {
  +                            iIndex = new Integer(0);
  +                            containerIndex.put(parent, iIndex);
  +                        }
   
  -                                    
//System.out.println("------------------------>" +l);
  -                                    ImportExportUtils.orderContainerList(l, 
jParams);
  -                                    
//System.out.println("------------------ordered------>" +l);
  -
  -                                    if (uuid != null) {
  -                                        for (Iterator iterator = 
l.iterator(); iterator.hasNext();) {
  -                                            ContentContainer 
contentContainer = (ContentContainer) iterator.next();
  -                                            Map p = 
ServicesRegistry.getInstance().getJahiaContainersService().getContainerProperties(contentContainer.getID());
  -                                            if (uuid.equals(p.get("uuid"))) {
  -                                                iIndex = new 
Integer(l.indexOf(contentContainer));
  -                                                break;
  -                                            }
  -                                        }
  -                                    }
  -                                    if(l.size()<=iIndex.intValue()) {
  -                                        // the list exist but there's no 
childs so we must create content marked as updated from source
  -                                        currentObject = createObject(parent, 
namespaceURI, localName, atts);
  -                                    } else {
  -                                        currentObject = (ContentContainer) 
l.get(iIndex.intValue());
  -                                    }
  -                                    if (op == 
VersioningDifferenceStatus.TO_BE_REMOVED) {
  -                                        containerIndex.put(parent, new 
Integer(iIndex.intValue()));
  -                                    } else {
  -                                        containerIndex.put(parent, new 
Integer(iIndex.intValue() + 1));
  -                                    }
  -                                } else if (parent instanceof 
ContentPageField) {
  -                                    // Page
  -                                    ContentPageField theField = 
(ContentPageField) parent;
  -                                    currentObject = 
theField.getContentPage(elr);
  +                        //System.out.println("------------------------>" +l);
  +                        ImportExportUtils.orderContainerList(l, jParams);
  +                        
//System.out.println("------------------ordered------>" +l);
  +
  +                        if (uuid != null) {
  +                            for (Iterator iterator = l.iterator(); 
iterator.hasNext();) {
  +                                ContentContainer contentContainer = 
(ContentContainer) iterator.next();
  +                                Map p = 
ServicesRegistry.getInstance().getJahiaContainersService().getContainerProperties(contentContainer.getID());
  +                                if (uuid.equals(p.get("uuid"))) {
  +                                    currentObject = contentContainer;
  +                                    break;
                                   }
                               }
  -
  -
  -                            if (op == 
VersioningDifferenceStatus.TO_BE_REMOVED) {
  -                                Set curLanguageCodes = new HashSet();
  -                                if (currentObject instanceof 
ContentContainer) {
  -                                    ContentContainer contentContainer = 
(ContentContainer) currentObject;
  -                                    
curLanguageCodes.add(ContentObject.SHARED_LANGUAGE);
  -
  -                                    StateModificationContext 
stateModifContext =
  -                                            new 
StateModificationContext(currentObject.getObjectKey(), curLanguageCodes, true);
  -                                    stateModifContext.pushAllLanguages(true);
  -
  -                                    contentContainer.markLanguageForDeletion(
  -                                            jParams.getUser(),
  -                                            ContentObject.SHARED_LANGUAGE,
  -                                            stateModifContext);
  -
  -                                } else {
  -                                    Set langs = new HashSet();
  -                                    langs.add(language);
  -                                    langs.add(ContentObject.SHARED_LANGUAGE);
  -                                    StateModificationContext 
stateModifContext =
  -                                            new 
StateModificationContext(currentObject.getObjectKey(), langs, true);
  -                                    
currentObject.markLanguageForDeletion(jParams.getUser(), language, 
stateModifContext);
  -                                }
  -                            } else if (op == 
VersioningDifferenceStatus.TO_BE_UPDATED) {
  -                                update(currentObject, localName, atts, 
jParams.getUser());
  +                        } else {
  +                            try {
  +                                currentObject = (ContentContainer) 
l.get(iIndex.intValue());
  +                            } catch (Exception e) {
  +                                currentObject = null;
                               }
                           }
  -
  -                        objectMap.put(uuid, currentObject);
  -                    } catch (Throwable e) {
  -                        
result.setStatus(TreeOperationResult.PARTIAL_OPERATION_STATUS);
  -                        if (currentObject != null) {
  -                            result.appendError(new 
NodeImportResult(currentObject.getObjectKey(), language, e.getMessage(), 
localName, namespaceURI, qName, atts, e));
  +                        if (op == VersioningDifferenceStatus.TO_BE_REMOVED) {
  +                            containerIndex.put(parent, new 
Integer(iIndex.intValue()));
                           } else {
  -                            result.appendError(new NodeImportResult(null, 
language, e.getMessage(), localName, namespaceURI, qName, atts, e));
  +                            containerIndex.put(parent, new 
Integer(iIndex.intValue() + 1));
  +                        }
  +                    } else if (parent instanceof ContentPageField) {
  +                        // Page
  +                        ContentPageField theField = (ContentPageField) 
parent;
  +                        currentObject = theField.getContentPage(elr);
  +                    }
  +                }
  +
  +
  +                if (op == VersioningDifferenceStatus.TO_BE_REMOVED) {
  +                    Set curLanguageCodes = new HashSet();
  +                    if (currentObject instanceof ContentContainer) {
  +                        ContentContainer contentContainer = 
(ContentContainer) currentObject;
  +                        curLanguageCodes.add(ContentObject.SHARED_LANGUAGE);
  +
  +                        StateModificationContext stateModifContext =
  +                                new 
StateModificationContext(currentObject.getObjectKey(), curLanguageCodes, true);
  +                        stateModifContext.pushAllLanguages(true);
  +
  +                        contentContainer.markLanguageForDeletion(
  +                                jParams.getUser(),
  +                                ContentObject.SHARED_LANGUAGE,
  +                                stateModifContext);
  +
  +                    } else {
  +                        Set langs = new HashSet();
  +                        langs.add(language);
  +                        langs.add(ContentObject.SHARED_LANGUAGE);
  +                        StateModificationContext stateModifContext =
  +                                new 
StateModificationContext(currentObject.getObjectKey(), langs, true);
  +                        
currentObject.markLanguageForDeletion(jParams.getUser(), language, 
stateModifContext);
  +                    }
  +
  +                    if (currentObject instanceof PageReferenceableInterface) 
{
  +                        HtmlCache htmlCache = 
ServicesRegistry.getInstance().getCacheService().getHtmlCacheInstance();
  +                        if (htmlCache != null) {
  +                            
htmlCache.invalidatePageEntries(Integer.toString(((PageReferenceableInterface) 
currentObject).getPageID()));
                           }
                       }
  +                } else if (op == VersioningDifferenceStatus.TO_BE_UPDATED) {
  +                    update(currentObject, localName, atts, 
jParams.getUser());
  +                }
  +            }
  +
  +            objectMap.put(uuid, currentObject);
  +
  +            String version = 
atts.getValue(ImportExportBaseService.JAHIA_URI, "version");
  +            if (version != null) {
  +                if (currentObject.isShared()) {
  +                    currentObject.setProperty("lastPickedVersion", version);
  +                } else {
  +                    currentObject.setProperty("lastPickedVersion-"+language, 
version);
  +                }
  +            }
  +        } catch (Throwable e) {
  +            result.setStatus(TreeOperationResult.PARTIAL_OPERATION_STATUS);
  +            if (currentObject != null) {
  +                result.appendError(new 
NodeImportResult(currentObject.getObjectKey(), language, e.getMessage(), 
localName, namespaceURI, qName, atts, e));
  +            } else {
  +                result.appendError(new NodeImportResult(null, language, 
e.getMessage(), localName, namespaceURI, qName, atts, e));
  +            }
  +        }
   //                }
   //            });
   //        } catch (Throwable e) {
   //            logger.error("Error during add operation of a new element we 
must flush all caches to ensure integrity between database and viewing",e);
   ////            
ServicesRegistry.getInstance().getCacheService().flushAllCaches();
   //        }
  -                finally {
  +        finally {
               objects.push(currentObject);
               currentObject = null;
           }
  @@ -343,22 +359,22 @@
   
       public void endElement(String namespaceURI, String localName, String 
qName) throws SAXException {
           lastObject = (ContentObject) objects.pop();
  -        logger.info("End element {" + namespaceURI + "}" +localName + " = 
"+lastObject);
  +        logger.info("End element {" + namespaceURI + "}" + localName + " = " 
+ lastObject);
   
  -        if (lastObject == topObjectWithAclChanged && topAcl != null) {
  +        if (lastObject == topObjectWithAclChanged && lastObject != null && 
topAcl != null) {
               JahiaBaseACL acl = topObjectWithAclChanged.getACL();
               try {
                   acl.setInheritance(0);
                   fillAcl(acl, topAcl);
               } catch (JahiaACLException e) {
  -                logger.error ("Cannot set user or group ACL entry !!", e);
  +                logger.error("Cannot set user or group ACL entry !!", e);
               }
           }
       }
   
   
       protected ContentObject createObject(ContentObject parent, String 
namespaceURI, String localName, Attributes atts) throws JahiaException {
  -        logger.info("Create {" + namespaceURI + "}" +localName);
  +        logger.info("Create {" + namespaceURI + "}" + localName);
           ContentObject object = null;
           int pageID = 0;
           if (parent instanceof ContentPage || parent instanceof 
ContentContainer) {
  @@ -897,20 +913,7 @@
   
       private void setUuid(ContentObject object, String uuid) throws 
JahiaException {
           if (copyUuid) {
  -            if (object instanceof ContentField) {
  -                ((ContentField)object).getProperties().put("uuid", uuid);
  -                ((ContentField)object).storeProperties();
  -            } else if (object instanceof ContentPage) {
  -                ((ContentPage)object).setProperty("uuid",uuid);
  -            } else if (object instanceof ContentContainer) {
  -                Map p = 
ServicesRegistry.getInstance().getJahiaContainersService().getContainerProperties(object.getID());
  -                p.put("uuid",uuid);
  -                
ServicesRegistry.getInstance().getJahiaContainersService().setContainerProperties(object.getID(),
 site.getID(), p);
  -            } else if (object instanceof ContentContainerList) {
  -                Map p = 
ServicesRegistry.getInstance().getJahiaContainersService().getContainerListProperties(object.getID());
  -                p.put("uuid",uuid);
  -                
ServicesRegistry.getInstance().getJahiaContainersService().setContainerListProperties(object.getID(),
 site.getID(), p);
  -            }
  +            object.setProperty("uuid",uuid);
           }
       }
   
  

Reply via email to