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

Reply via email to