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