Author: bpapez
Date: Tue Nov 13 11:48:33 2007
New Revision: 19127
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19127&repname=
=3Djahia
Log:
SNCF-30: Log more infos why a container/field definition is being changed
Modified:
branches/JAHIA-4-1-BRANCH/src/java/org/jahia/data/containers/JahiaConta=
inerSet.java
Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/data/containers/Jahi=
aContainerSet.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/data/containers/JahiaContainerSet.java&rev=3D19127&=
repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-4-1-BRANCH/src/java/org/jahia/data/containers/JahiaConta=
inerSet.java (original)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/data/containers/JahiaConta=
inerSet.java Tue Nov 13 11:48:33 2007
@@ -15,6 +15,7 @@
//
package org.jahia.data.containers;
=
+import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
@@ -28,6 +29,7 @@
import java.util.Vector;
=
import org.apache.log4j.Logger;
+import org.jahia.bin.Jahia;
import org.jahia.data.JahiaData;
import org.jahia.data.fields.JahiaFieldDefinition;
import org.jahia.data.fields.JahiaFieldSubDefinition;
@@ -281,17 +283,17 @@
Properties declaredProps =3D (Properties) this.declaredFie=
ldDefProps
.get(fieldName);
=
- boolean propsHasChanged =3D ((props =3D=3D null && (declar=
edProps !=3D null && declaredProps
+ boolean propsHaveChanged =3D ((props =3D=3D null && (decla=
redProps !=3D null && declaredProps
.size() > 0))
|| ((props !=3D null && props.size() > 0) && decla=
redProps =3D=3D null) || (props !=3D null
&& declaredProps !=3D null && !props
.equals(declaredProps)));
-
- if (!((aDef.getTitle(pageDefID).equals(fieldTitle))
- && (aDef.getType(pageDefID) =3D=3D fieldType)
- && ((aDef.getDefaultValue(pageDefID) =3D=3D null &=
& defaultValue =3D=3D null) || (aDef
- .getDefaultValue(pageDefID) !=3D null && (aDef
- .getDefaultValue(pageDefID).equals(defaultValu=
e)))) && !propsHasChanged)) {
+ boolean titleHasChanged =3D !aDef.getTitle(pageDefID).equa=
ls(fieldTitle);
+ boolean typeHasChanged =3D (aDef.getType(pageDefID) !=3D f=
ieldType);
+ boolean defaultValueHasChanged =3D ((aDef.getDefaultValue(=
pageDefID) !=3D null) &&
+ (aDef.getDefaultValue(pageDefID) =3D=3D null ||
+ (!aDef.getDefaultValue(pageDefID).equals(d=
efaultValue))));
+ if (titleHasChanged || typeHasChanged || defaultValueHasCh=
anged || propsHaveChanged) { =
// well, data is not the same in the registry and in t=
he declare() method !
// this means the user has changed the field declarati=
on in the template...
// before doing anything else, we have to be sure that=
the user didn't change the
@@ -309,6 +311,35 @@
JahiaException.CRITICAL_SEVERITY);
=
} else {
+ if (aDef.getType(pageDefID) !=3D -1) {
+ boolean someChanges=3Dfalse;
+ logger.warn("Definition for field " + fieldTit=
le + " (in " + containerName + ") has changed. ");
+ if (propsHaveChanged) {
+ logger.warn(" Properties have changed : " =
+ props + " / " + declaredProps);
+ someChanges=3Dtrue;
+ }
+ if (titleHasChanged) {
+ logger.warn(" Title has changed : " + aDef=
.getTitle(pageDefID) + " / " + fieldTitle);
+ someChanges=3Dtrue;
+ }
+ if (typeHasChanged) {
+ logger.warn(" Type has changed : " + aDef.=
getType(pageDefID) + " / " + fieldType);
+ someChanges=3Dtrue;
+ }
+ if (defaultValueHasChanged) {
+ logger.warn(" Default value has changed : =
" + aDef.getDefaultValue(pageDefID) + " / " + defaultValue);
+ someChanges=3Dtrue;
+ }
+ if (someChanges) {
+ if (logger.isDebugEnabled()) {
+ Throwable throwable =3D (new Throwable=
());
+ throwable.fillInStackTrace();
+ traceCaller(throwable, "declareField");
+ } else {
+ logger.warn("please activate debug mod=
e on " + JahiaContainerSet.class.getPackage() + "." + JahiaContainerSet.cla=
ss.getName() + " in your log4j.xml configuration to have more info");
+ }
+ }
+ } =
// okay, no alert ahead, the type hasn't been modi=
fied
// let's synchronize the data between :
// - the template declaration (file)
@@ -588,18 +619,37 @@
if (aDef !=3D null) {
// okay, it seems the definition already exists.
// now has it the same data than in the database ?
-
- boolean havePropertiesChanged =3D aDef
+ =
+ Properties properties =3D new Properties(aDef.getPropertie=
s());
+ boolean propertiesHaveChanged =3D aDef
.propertiesChanged(ctnDefProperties);
-
// checks if title changed
+ boolean titleHasChanged =3D !aDef.getTitle(pageDefID).equa=
ls(
+ containerTitle);
// checks if structure changed
- if ((!aDef.getTitle(pageDefID).equals(containerTitle))
- || (aDef.structureChanged(containerFields, pageDef=
ID))
- || (havePropertiesChanged)) {
+ boolean structureHasChanged =3D aDef.structureChanged(
+ containerFields, pageDefID);
+
+ if (titleHasChanged || structureHasChanged
+ || propertiesHaveChanged) {
=
- logger.warn("container structure changed: "
- + containerTitle);
+ if (aDef.getStructure("", pageDefID).hasMoreElements()
+ || aDef.getTitle(pageDefID).length() > 0) {
+ logger.warn("Definition for container " + containe=
rName
+ + " has changed");
+ if (propertiesHaveChanged) {
+ logger.warn(" Properties have changed : "
+ + properties + " / " + ctnDefPropertie=
s);
+ }
+ if (titleHasChanged) {
+ logger.warn(" Title has changed : "
+ + aDef.getTitle(pageDefID) + " / "
+ + containerTitle);
+ }
+ if (structureHasChanged) {
+ logger.warn(" Structure has changed");
+ }
+ }
synchronized (ctnDefRegistry) {
aDef.getProperties().putAll(ctnDefProperties);
// well, data is not the same in the registry and =
in the declare() method !
@@ -617,7 +667,7 @@
* of things have changed, including window
* parameters.
*/
- if (havePropertiesChanged) {
+ if (propertiesHaveChanged) {
logger.debug("Reloading containerList " + containe=
rName
+ "...");
// small hack: to avoid doing this everywhere and =
to
@@ -1307,7 +1357,13 @@
ServicesRegistry.getInstance().getJahiaContainersService()
.saveContainerListInfo(fakeContainerList, pageACLID);
=
- return getAbsoluteContainerList(containerName,pageID);
+ addContainerList(fakeContainerList);
+
+ // let's update cross reference list
+ absoluteContainerListAccesses.add(new Integer(fakeContaine=
rList.
+ getID()));
+
+ return fakeContainerList;
=
} else {
return null;
@@ -1421,5 +1477,30 @@
public int size() {
return containerLists.size();
}
+ =
+ /**
+ * internal method to trace re-definition callers
+ * @param t the throwable
+ * @param methodName the name of method to trace
+ */
+ private void traceCaller(Throwable t,String methodName){
+ String requestURI =3D Jahia.getThreadParamBean().getRequest().getR=
equestURI();
+ String templateName =3D jData.getParamBean().getPage().getPageTemp=
late().getName();
+ String templateSource =3D jData.getParamBean().getPage().getPageTe=
mplate().getSourcePath();
+ String templateJspSourceName =3D templateSource.substring(template=
Source.lastIndexOf(File.separator) + 1, templateSource.lastIndexOf("."));
+
+ for (int i =3D 0; i < t.getStackTrace().length; i++) {
+ // trace only if method called is equal to methodName or _jspS=
ervice(scriptlet)
+ if (t.getStackTrace()[i].getFileName().indexOf(templateJspSour=
ceName) !=3D -1
+ && (t.getStackTrace()[i].getMethodName().indexOf(meth=
odName)!=3D-1 || t.getStackTrace()[i].getMethodName().indexOf("_jspService"=
)!=3D-1 ))
+ logger.debug("Field ReDefinition:"
+ + "\nrequested uri:" + requestURI
+ + "\ntemplatename:" + templateName
+ + "\ntemplatepath:" + templateSource
+ + "\n"+t.getStackTrace()[i].getMethodName()
+ + " at line " + t.getStackTrace()[i].getLineNumber=
()
+ + "\nin file " + t.getStackTrace()[i].getFileName(=
));
+ }
+ } =
=
} // end JahiaContainerSet
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list