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();
}
}