tdraier     2005/10/04 15:52:40 CEST

  Modified files:
    core/src/java/org/jahia/services/importexport 
                                                  ImportExportBaseService.java 
                                                  ImportHandler.java 
  Log:
  import fixes - do not create multiple containerlist or field with same names 
at the same place
  
  Revision  Changes    Path
  1.31      +2 -0      
jahia/core/src/java/org/jahia/services/importexport/ImportExportBaseService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/importexport/ImportExportBaseService.java.diff?r1=1.30&r2=1.31&f=h
  1.22      +90 -124   
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.21&r2=1.22&f=h
  
  
  
  Index: ImportExportBaseService.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/importexport/ImportExportBaseService.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- ImportExportBaseService.java      3 Oct 2005 16:32:26 -0000       1.30
  +++ ImportExportBaseService.java      4 Oct 2005 13:52:39 -0000       1.31
  @@ -515,6 +515,7 @@
                                   try {
                                       ensureDir(name1, jParams, 
jParams.getSite());
                                   } catch (Throwable e) {
  +                                    logger.error("Error", e);
                                       throw new RuntimeException(e);
                                   }
                               }
  @@ -529,6 +530,7 @@
                                       String contentType = ((ParamBean) 
jParams).getContext().getMimeType(filename);
                                       dir.uploadFile(filename, zis, 
contentType, ((ParamBean) jParams).getRequest());
                                   } catch (Throwable e) {
  +                                    logger.error("Error", e);
                                       throw new RuntimeException(e);
                                   }
                               }
  
  
  
  Index: ImportHandler.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/importexport/ImportHandler.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- ImportHandler.java        30 Sep 2005 16:17:20 -0000      1.21
  +++ ImportHandler.java        4 Oct 2005 13:52:39 -0000       1.22
  @@ -189,40 +189,7 @@
                                       } else {
                                           pageID = parent.getID();
                                       }
  -
  -                                    JahiaFieldDefinition jfd = 
JahiaFieldDefinitionsRegistry.getInstance().getDefinition(site.getID(), 
localName);
  -                                    boolean isContainerList = (jfd == null);
  -
  -                                    // Field or containerlist inside a 
container or page
  -                                    if (isContainerList) {
  -                                        String containerName = 
localName.substring(0, localName.length() - 4);
  -                                        ContentContainerList cc;
  -                                        if (parent instanceof 
ContentContainer) {
  -                                            cc = ((ContentContainer) 
parent).getJahiaContainer(jParams, 
elr).getContainerList(containerName).getContentContainerList();
  -                                        } else {
  -                                            int id = 
ServicesRegistry.getInstance().getJahiaContainersService().getContainerListID(containerName,
 pageID);
  -                                            cc = 
ServicesRegistry.getInstance().getJahiaContainersService().loadContainerList(id,
 LoadFlags.ALL, jParams).getContentContainerList();
  -                                        }
  -                                        currentObject = cc;
  -                                    } else {
  -                                        ContentField cf = null;
  -                                        if (parent instanceof 
ContentContainer) {
  -                                            JahiaContainer jahiaContainer = 
((ContentContainer) parent).getJahiaContainer(jParams, elr);
  -                                            JahiaField f = 
jahiaContainer.getField(localName);
  -                                            if (f == null) {
  -                                                cf = (ContentField) 
createObject(parent, namespaceURI, localName, atts);
  -                                            } else {
  -                                                cf = f.getContentField();
  -                                            }
  -                                        } else {
  -                                            int id = 
ServicesRegistry.getInstance().getJahiaFieldService().getFieldID(localName, 
pageID);
  -                                            JahiaField jahiaField = 
ServicesRegistry.getInstance().getJahiaFieldService().loadField(id, 
LoadFlags.ALL, jParams, elr);
  -                                            if (jahiaField != null) {
  -                                                cf = 
jahiaField.getContentField();
  -                                            }
  -                                        }
  -                                        currentObject = cf;
  -                                    }
  +                                    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());
  @@ -248,18 +215,6 @@
   
                                       currentObject = (ContentContainer) 
l.get(iIndex.intValue());
   
  -                                    //                        if (op == 
VersioningDifferenceStatus.TO_BE_REMOVED) {
  -                                    //                            Set 
curLanguageCodes = new HashSet();
  -                                    //                            
curLanguageCodes.add(ContentObject.SHARED_LANGUAGE);
  -                                    //
  -                                    //                            
StateModificationContext stateModifContext =
  -                                    //                                    
new StateModificationContext(cc.getObjectKey(), curLanguageCodes, true);
  -                                    //                            
stateModifContext.pushAllLanguages(true);
  -                                    //
  -                                    //                            
cc.markLanguageForDeletion(jParams.getUser(),
  -                                    //                                    
ContentObject.SHARED_LANGUAGE,
  -                                    //                                    
stateModifContext);
  -                                    //                        }
                                       if (op == 
VersioningDifferenceStatus.TO_BE_REMOVED) {
                                           containerIndex.put(parent, new 
Integer(iIndex.intValue()));
                                       } else {
  @@ -323,24 +278,6 @@
       }
   
   
  -//    public void startElement(String namespaceURI, String localName, String 
qName, Attributes atts) throws SAXException {
  -//        try {
  -//            ContentObject parent = (ContentObject) objects.peek();
  -//
  -//            currentObject = createObject(parent, namespaceURI, localName, 
atts);
  -//
  -//
  -//            objects.push(currentObject);
  -//
  -//            String uuid = atts.getValue(ImportExportBaseService.JCR_URI, 
"uuid");
  -//            objectMap.put(uuid,currentObject);
  -//            currentObject = null;
  -//        } catch (JahiaException e) {
  -//            e.printStackTrace();
  -//            throw new SAXException(e);
  -//        }
  -//    }
  -
       protected ContentObject createObject(ContentObject parent, String 
namespaceURI, String localName, Attributes atts) throws JahiaException {
           logger.info("Create {" + namespaceURI + "}" +localName);
           ContentObject object = null;
  @@ -353,64 +290,7 @@
               } else {
                   pageID = parent.getID();
               }
  -            JahiaContainerDefinition jcd = null;
  -            if (localName.endsWith("List")) {
  -                jcd = 
JahiaContainerDefinitionsRegistry.getInstance().getDefinition(site.getID(), 
localName.substring(0,localName.length()-4));
  -            }
  -            boolean isContainerList = (jcd != null);
  -            JahiaFieldDefinition jfd = 
JahiaFieldDefinitionsRegistry.getInstance().getDefinition(site.getID(), 
localName);
  -
  -            if (jfd == null && jcd == null) {
  -                logger.warn("Definitions not found");
  -//                if (jParams instanceof ParamBean) {
  -//                    String servletPath = 
jParams.composePageUrl(pageID).substring(Jahia.getContextPath().length());
  -//                    servletPath+="/engineName/core";
  -//                    String engineName = jParams.getEngineName();
  -//                    jParams.setEngineName(ParamBean.CORE_ENGINE_NAME);
  -//                    String res = ServicesRegistry.getInstance 
().getJahiaFetcherService ()
  -//                            .fetchServlet (((ParamBean)jParams), 
servletPath);
  -//                    jParams.setEngineName(engineName);
  -//                }
  -            }
  -
  -            // Field or containerlist inside a container or page
  -            if (isContainerList) {
  -                // ContainerList definition
  -                JahiaContainerList newList = new JahiaContainerList (0, 
containerID, pageID, jcd.getID(), 0);
  -                ServicesRegistry.getInstance ().getJahiaContainersService ().
  -                        saveContainerListInfo (newList, 
parent.getAclID(),jParams);
  -                object = newList.getContentContainerList();
  -            } else {
  -                if (jfd == null) {
  -                    throw new JahiaException("Cannot import - incompatible 
types "+"{"+namespaceURI+"}"+localName,"Cannot import - incompatible 
types"+"{"+namespaceURI+"}"+localName,JahiaException.USER_ERROR,JahiaException.CRITICAL_SEVERITY);
  -                }
  -                // Field Definition
  -                String value = 
atts.getValue(ImportExportBaseService.JAHIA_URI, "value");
  -                int fieldType = 
jfd.getType(ServicesRegistry.getInstance().getJahiaPageService().lookupPage(pageID,
 jParams).getPageTemplateID());
  -                if (fieldType == FieldTypes.PAGE) {
  -                    value = "";
  -                }
  -
  -//                ServicesRegistry.getInstance ().getJahiaFetcherService ()
  -//                        .fetchServlet (jParams, 
jParams.composePageUrl(parent.getID()));
  -//
  -                JahiaField field = 
ServicesRegistry.getInstance().getJahiaFieldService().createJahiaField(0,site.getID(),pageID,containerID,jfd.getID(),fieldType,
 0, value, 0, 0, 0, EntryLoadRequest.STAGING_WORKFLOW_STATE, language);
  -                if (field.isShared()) {
  -                    field.setlanguageCode(ContentField.SHARED_LANGUAGE);
  -                } else {
  -                    field.setlanguageCode(language);
  -                }
  -                if (fieldType == FieldTypes.FILE) {
  -                    DAVFileAccess objectDav = 
JahiaWebdavBaseService.getInstance().getDAVFileAccess(jParams, site, 
jParams.getUser(), value);
  -//                    DAVFileAccess fileAccess = 
JahiaWebdavBaseService.getInstance().getDAVFileAccess(jParams, 
ServicesRegistry.getInstance().getJahiaSitesService().getSite(parent.getSiteID()),
 jParams.getUser(), value);
  -//                    fileAccess.uploadFile(objectDav.getName(), 
objectDav.downloadFile(), )
  -                    JahiaFileField fField = objectDav.getJahiaFileField();
  -                    field.setObject(fField);
  -                }
  -                ServicesRegistry.getInstance ().getJahiaFieldService 
().saveField (field, parent.getAclID (), jParams);
  -
  -                object = field.getContentField();
  -            }
  +            object = getOrCreateContainerListOrField(localName, 
namespaceURI, atts, parent, pageID, containerID);
           } else if (parent instanceof ContentContainerList) {
               try {
                   JahiaContainerDefinition jcd = ((JahiaContainerDefinition) 
JahiaContainerDefinition.getInstance(parent.getDefinitionKey(null)));
  @@ -555,6 +435,92 @@
           return object;
       }
   
  +    private ContentObject getOrCreateContainerListOrField(String localName, 
String namespaceURI, Attributes atts, ContentObject parent, int pageID, int 
containerID) throws JahiaException {
  +        ContentObject object;
  +
  +        JahiaContainerDefinition jcd = null;
  +        if (localName.endsWith("List")) {
  +            jcd = 
JahiaContainerDefinitionsRegistry.getInstance().getDefinition(site.getID(), 
localName.substring(0,localName.length()-4));
  +        }
  +        boolean isContainerList = (jcd != null);
  +        JahiaFieldDefinition jfd = 
JahiaFieldDefinitionsRegistry.getInstance().getDefinition(site.getID(), 
localName);
  +
  +        if (jfd == null && jcd == null) {
  +            logger.warn("Definitions not found");
  +        }
  +
  +        // Field or containerlist inside a container or page
  +        if (isContainerList) {
  +            String containerName = localName.substring(0, localName.length() 
- 4);
  +            ContentContainerList cc = null;
  +            JahiaContainerList containerList;
  +            if (parent instanceof ContentContainer) {
  +                containerList = ((ContentContainer) 
parent).getJahiaContainer(jParams, elr).getContainerList(containerName);
  +            } else {
  +                int id = 
ServicesRegistry.getInstance().getJahiaContainersService().getContainerListID(containerName,
 pageID);
  +                containerList = 
ServicesRegistry.getInstance().getJahiaContainersService().loadContainerList(id,
 LoadFlags.ALL, jParams);
  +            }
  +
  +            if (containerList != null) {
  +                cc = containerList.getContentContainerList();
  +            }
  +
  +            if (cc == null) {
  +                // ContainerList definition
  +                JahiaContainerList newList = new JahiaContainerList (0, 
containerID, pageID, jcd.getID(), 0);
  +                ServicesRegistry.getInstance ().getJahiaContainersService ().
  +                        saveContainerListInfo (newList, 
parent.getAclID(),jParams);
  +                cc = newList.getContentContainerList();
  +            }
  +            object = cc;
  +        } else {
  +            ContentField cf = null;
  +            if (parent instanceof ContentContainer) {
  +                JahiaContainer jahiaContainer = ((ContentContainer) 
parent).getJahiaContainer(jParams, elr);
  +                JahiaField f = jahiaContainer.getField(localName);
  +                if (f != null) {
  +                    cf = f.getContentField();
  +                }
  +            } else {
  +                int id = 
ServicesRegistry.getInstance().getJahiaFieldService().getFieldID(localName, 
pageID);
  +                JahiaField jahiaField = 
ServicesRegistry.getInstance().getJahiaFieldService().loadField(id, 
LoadFlags.ALL, jParams, elr);
  +                if (jahiaField != null) {
  +                    cf = jahiaField.getContentField();
  +                }
  +            }
  +
  +            if (cf == null) {
  +                if (jfd == null) {
  +                    throw new JahiaException("Cannot import - incompatible 
types "+"{"+namespaceURI+"}"+localName,"Cannot import - incompatible 
types"+"{"+namespaceURI+"}"+localName,JahiaException.USER_ERROR,JahiaException.CRITICAL_SEVERITY);
  +                }
  +                // Field Definition
  +                String value = 
atts.getValue(ImportExportBaseService.JAHIA_URI, "value");
  +                int fieldType = 
jfd.getType(ServicesRegistry.getInstance().getJahiaPageService().lookupPage(pageID,
 jParams).getPageTemplateID());
  +                if (fieldType == FieldTypes.PAGE) {
  +                    value = "";
  +                }
  +
  +                JahiaField field = 
ServicesRegistry.getInstance().getJahiaFieldService().createJahiaField(0,site.getID(),pageID,containerID,jfd.getID(),fieldType,
 0, value, 0, 0, 0, EntryLoadRequest.STAGING_WORKFLOW_STATE, language);
  +                if (field.isShared()) {
  +                    field.setlanguageCode(ContentField.SHARED_LANGUAGE);
  +                } else {
  +                    field.setlanguageCode(language);
  +                }
  +                if (fieldType == FieldTypes.FILE) {
  +                    DAVFileAccess objectDav = 
JahiaWebdavBaseService.getInstance().getDAVFileAccess(jParams, site, 
jParams.getUser(), value);
  +                    JahiaFileField fField = objectDav.getJahiaFileField();
  +                    field.setObject(fField);
  +                }
  +                ServicesRegistry.getInstance ().getJahiaFieldService 
().saveField (field, parent.getAclID (), jParams);
  +
  +                cf = field.getContentField();
  +            }
  +            object = cf;
  +        }
  +
  +        return object;
  +    }
  +
       protected void update(ContentObject object, Attributes atts) throws 
JahiaException {
           if (object instanceof ContentField) {
               ContentField cf = (ContentField) object;
  @@ -660,9 +626,9 @@
                   }
               }
           } catch (ClassNotFoundException e) {
  -            e.printStackTrace();  //To change body of catch statement use 
File | Settings | File Templates.
  +            e.printStackTrace();
           } catch (JahiaException e) {
  -            e.printStackTrace();  //To change body of catch statement use 
File | Settings | File Templates.
  +            e.printStackTrace();
           }
       }
   
  

Reply via email to