diff --git a/src/de/superx/common/Field.java b/src/de/superx/common/Field.java index b7d0af2f..c17f6c59 100644 --- a/src/de/superx/common/Field.java +++ b/src/de/superx/common/Field.java @@ -5,6 +5,7 @@ import static de.superx.servlet.SxSQL_Server.DEFAULT_MANDANTEN_ID; import java.io.IOException; import java.sql.SQLException; import java.text.ParseException; +import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; @@ -28,6 +29,7 @@ import de.memtext.util.DateUtils; import de.memtext.util.NumberUtils; import de.memtext.util.StringUtils; import de.superx.rest.model.FieldType; +import de.superx.rest.model.Item; import de.superx.sec.CheckExecution; import de.superx.servlet.ExternalPool; import de.superx.servlet.ServletUtils; @@ -1915,7 +1917,7 @@ public class Field extends NamedIdObject implements TemplateHashModel, TemplateM return false; } - public StringBuffer getJSON(String param) + public StringBuffer getJSON(String param,boolean completeTree) throws SQLException, DBServletException, KeyParentEqualException, CloneNotSupportedException, SichtException, TemplateException, IOException { // System.out.println("defaultvaluestring:"+this.defaultwertString+" // defaultvalue *"+getDefaultValue().getId()+"*"); @@ -1929,7 +1931,7 @@ public class Field extends NamedIdObject implements TemplateHashModel, TemplateM if (param.startsWith("search:")) addSearchJSON(param, result); else - addRegularJSON(param, result); + addRegularJSON(param, result,completeTree); result.append(")"); return result; @@ -1950,18 +1952,21 @@ public class Field extends NamedIdObject implements TemplateHashModel, TemplateM else isFirstItem = false; - result.append(node.toJSON(this.getDefaultValue().getId(), false)); + result.append(node.toJSON(this.getDefaultValue().getId(), "AllKids")); } } result.append("]"); } - private void addRegularJSON(String param, StringBuffer result) { + private void addRegularJSON(String param, StringBuffer result, boolean completeTree) { if (!this.getSelectableItemsTree().containsItemWithId(param)) throw new IllegalArgumentException("Im Feld " + getName() + " (" + getId() + ") gibt es kein Element " + param); - + String kidsInclusion="onlyDirectKids"; + if(completeTree) + kidsInclusion="AllKids"; SelectableItemNode startnode = getSelectableItemsTree().getById(param); boolean isSingleRoot = startnode.getChildCount() < 2; + if (param.equals("xxxxxx-xxxxxx@")) { result.append("{"); if (isOldOrganigrammArt() || isSicht()) { @@ -1985,9 +1990,26 @@ public class Field extends NamedIdObject implements TemplateHashModel, TemplateM // }; } - result.append("["); - + + /*if(completeTree) + { + if (startnode != null && startnode.getChildCount() > 0) { + Collection col = getSelectableItemsTree() + .getElements(SelectableItemTree.PREORDER_ENUM, false); + + for (SelectableItemNode node2 : col) { + SelectableItem item = (SelectableItem) node2.getUserObject(); + result.append("["); + result.append(node2.toJSON(this.getDefaultValue().getId(), isSingleRoot)); + result.append("]"); + } + } + } + else + {*/ boolean isFirstItem = true; + + result.append("["); for (Enumeration en = startnode.children(); en.hasMoreElements();) { SelectableItemNode node = (SelectableItemNode) en.nextElement(); if (node.isHidden()) continue; @@ -1996,11 +2018,15 @@ public class Field extends NamedIdObject implements TemplateHashModel, TemplateM else isFirstItem = false; - result.append(node.toJSON(this.getDefaultValue().getId(), isSingleRoot)); - } + result.append(node.toJSON(this.getDefaultValue().getId(), kidsInclusion));//isSingleRoot)); + result.append("]"); + } + //}//Ende Lazy Loading if (param.equals("xxxxxx-xxxxxx@")) result.append("}"); + + } /** diff --git a/src/de/superx/common/SelectableItemNode.java b/src/de/superx/common/SelectableItemNode.java index c93eab07..94d0293d 100644 --- a/src/de/superx/common/SelectableItemNode.java +++ b/src/de/superx/common/SelectableItemNode.java @@ -413,9 +413,12 @@ public class SelectableItemNode extends HideableNode return result; } - public StringBuffer toJSON(Object defaultId, boolean isIncludingKids) { + public StringBuffer toJSON(Object defaultId, String kidsInclusion //boolean isIncludingKids, boolean isIncludingAllKids + ) { SelectableItem item = (SelectableItem) this.getUserObject(); - + boolean isIncludingKids=false; + if(kidsInclusion.equals("onlyDirectKids") || kidsInclusion.equals("AllKids")) + isIncludingKids=true; StringBuffer result = new StringBuffer("{objectId:\"" + StringUtils.jsonAdapt(item.getId().toString(), true) + "\",title:\"" + StringUtils.jsonAdapt(getName(), true) + "\""); if (EqualsUtil.areEqual(getKey(), defaultId)) result.append(",isSelected:true"); @@ -434,7 +437,8 @@ public class SelectableItemNode extends HideableNode result.append(","); else isFirst = false; - result.append(kid.toJSON(defaultId, false)); + + result.append(kid.toJSON(defaultId, kidsInclusion)); } result.append("]"); } diff --git a/src/de/superx/servlet/SuperXmlMaske.java b/src/de/superx/servlet/SuperXmlMaske.java index a48be2ab..64758c19 100644 --- a/src/de/superx/servlet/SuperXmlMaske.java +++ b/src/de/superx/servlet/SuperXmlMaske.java @@ -194,7 +194,7 @@ public class SuperXmlMaske extends AbstractSuperXServlet { InvalidKeyException, SichtException, IOException, ServletException, NoMainEntryException, InvalidDataTypeException { if (user == null) throw new IllegalStateException("Kein user in der Session gefunden - bitte Browser neu starten!"); userid = request.getSession().getAttribute(SessionAttribute.UserID.toString()).toString(); - + boolean completeTree=false; String tidString = getTid(request); StringBuffer json = new StringBuffer(""); MaskenContainer mc = MaskenContainer.getFromRequest(request); @@ -204,8 +204,18 @@ public class SuperXmlMaske extends AbstractSuperXServlet { try { for (Enumeration en = request.getParameterNames(); en.hasMoreElements();) { String aName = en.nextElement(); + String fieldName=""; if (aName.startsWith("getJSON_")) { - Field f = maske.getField(aName.substring(8)); + fieldName=aName.substring(8); + if (aName.startsWith("getJSON_COMPLETE")) + { + completeTree=true; + fieldName=aName.substring(16); + + } + + + Field f = maske.getField(fieldName); String param = getParameterString(request, aName); if (((f.getArt() != Art.id_12_Sicht && !f.isOldOrganigrammArt())) && f.isDynamic() && param != null && param.equals("xxxxxx-xxxxxx@")) { @@ -225,7 +235,7 @@ public class SuperXmlMaske extends AbstractSuperXServlet { } // verarbeitet auch search: - json.append(f.getJSON(param)); + json.append(f.getJSON(param,completeTree)); } diff --git a/superx/WEB-INF/conf/version.properties b/superx/WEB-INF/conf/version.properties index 4b9b6486..551a1a4c 100644 --- a/superx/WEB-INF/conf/version.properties +++ b/superx/WEB-INF/conf/version.properties @@ -1,2 +1,2 @@ git.branch=HEAD -git.commit.hash=aefd4a5c2cf50e0ff91a3b4cecf1b3df09cc4b5d +git.commit.hash=1acb4db1ce6fcd8a161e2f73afb8c70c4242fe40 diff --git a/superx/WEB-INF/lib/superx6.0.jar b/superx/WEB-INF/lib/superx6.0.jar index a8a0d204..bc1450eb 100644 Binary files a/superx/WEB-INF/lib/superx6.0.jar and b/superx/WEB-INF/lib/superx6.0.jar differ diff --git a/superx/edit/kern/maske_sicht_laden.jsp b/superx/edit/kern/maske_sicht_laden.jsp index 2ed69d1a..782f6be3 100644 --- a/superx/edit/kern/maske_sicht_laden.jsp +++ b/superx/edit/kern/maske_sicht_laden.jsp @@ -35,7 +35,12 @@ if(referrerForm==null || referrerForm.equals("")) String params = request.getParameter("params"); -String callurl="../../servlet/SuperXmlMaske?tid="+tid+"&getJSON_"+fname+"=xxxxxx-xxxxxx@"; +String callurl="../../servlet/SuperXmlMaske?tid="+tid; +if(previousValue==null || previousValue.equals("")) + callurl+="&getJSON_"+fname+"=xxxxxx-xxxxxx@"; +else + callurl+="&getJSON_COMPLETE"+fname+"=xxxxxx-xxxxxx@"; + callurl+=params; %> @@ -81,16 +86,6 @@ var previousValuesArray=ndMaskDialogPreviousValueToArray(previousValue); var previousValuesCount=0; if(previousValuesArray) previousValuesCount=previousValuesArray.length; -var indeterminateValues=""; -if(referrerForm.elements[fname+"-IndeterminateValues"]) -{ - indeterminateValues=referrerForm.elements[fname+"-IndeterminateValues"].value; - } -var indeterminateValuesArray=ndMaskDialogPreviousValueToArray(indeterminateValues); -var indeterminateValuesCount=0; -if(indeterminateValuesArray) - indeterminateValuesCount=indeterminateValuesArray.length; - //previousValuesCount=0; //TODO: wenn previousValue, dann klappt Aufklappen nicht immer var treeNodes=new Array(); @@ -110,7 +105,7 @@ var xhttp = new XMLHttpRequest(); xhttp.open("GET", url, true); xhttp.send(); } -//202604 Label aktualisiert: Sicht in Sicht ändern + function renderSichtauswahl(content) { var targetDiv=document.getElementById("sichtauswahlDiv"); @@ -118,7 +113,7 @@ var zs=""; //zs+="TTT"+JSON.stringify(content.sichten.selected); if(content && content.sichten.selected && content.sichten.selected.name ) { -zs += "
"; +zs += "
"; //zs += "Ausgewählte Sicht:
"; //zs+="
"; zs+= buildSichtauswahlSelect(content); @@ -140,12 +135,12 @@ else zs+="Keine Sichtauswahl möglich"; } -//Suche: 202605 is-small entfernt aus class=input und class=button, style für button ergänzt +//Suche: zs += "
"; zs += ""; -zs+="
"; -zs+= ""; -zs+="
"; zs+="
"; @@ -207,7 +202,8 @@ for(var j=0;j < content.nodes.length;j++) { var node=content.nodes[j]; zs +=renderNode(node,null,//parent -true,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl); +true,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl,0 //ebene +); } } @@ -216,14 +212,15 @@ targetDiv.innerHTML=zs; checkIndeterminates(); } -function renderNode(node,parentId,isRoot,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl) + +function renderNode(node,parentId,isRoot,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl,ebene) { +ebene++; var zs=""; if(searchstring=="" || node.title.indexOf(searchstring)>-1) { if(node.objectId !="") { - console.log("RenderNode"+node.objectId); var checkedString=""; for(var i=0;i < previousValuesCount;i++) { @@ -231,6 +228,7 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1) checkedString="checked "; } + var fldName="inp"+node.objectId; var fldId="inp"+node.objectId; var fldType="checkbox"; @@ -246,7 +244,7 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1) else { - zs += "
  • "; + zs += "
  • "; if(isRoot) { zs+=""; @@ -255,10 +253,12 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1) { if(node.isFolder=="true") { + zs+=""; zs+=" "; - + //if(previousValuesCount==0 && !isRoot) + // hideChildNodes(node.objectId.trim(),"sichtentreeCaret_"+node.objectId); } else zs+=""; @@ -277,9 +277,12 @@ if(searchstring=="" || node.title.indexOf(searchstring)>-1) { for(var i=0;i < node.children.length;i++) { - zs+="
      "; + zs+="
        1) + zs+="class='sichtentreeChildUL sichtentreeNested'"; + zs+=">"; zs += renderNode(node.children[i],node.objectId,//parent - false,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl); + false,searchstring,previousValuesCount,previousValuesArray,zeilenanzahl,ebene); zs +="
      "; } @@ -340,17 +343,33 @@ if(node.apnr==targetNodeId) } return parent; } +/*function hideChildNodes(nodeId,spanElem) +{ +var childUlId="childOf"+nodeId; +document.getElementById(childUlId).classList.toggle("sichtentreeNested"); +}*/ function getChildNodes(nodeId,spanElem) { //spanElem.parentElement.querySelector(".sichtentreeNested").classList.toggle("sichtentreeActive"); -var childUlId="childOf"+nodeId; +var childUlIdPrefix="childOf"+nodeId; spanElem.classList.toggle("sichtentreeCaret-down"); +var ulChildren = document.getElementById("liElem"+nodeId).getElementsByTagName('ul'); + +if(ulChildren.length>0) +{ +for(var i=0;i0) +if(previousValuesCount>0) { - for(var i=0;i < indeterminateValuesCount;i++) - { for(var j=0;j < document.forms["selection"].elements.length;j++) { - if(indeterminateValuesArray[i]==document.forms["selection"].elements[j].value) + var inpElem=document.forms["selection"].elements[j]; + var inputType = inpElem.type; + var inputName = inpElem.name; + if((inputType=="checkbox" || inputType=="radio") + //&& (!inpElem.name=="metaCheckbox" //&& + //(!inpElem.indeterminate || inpElem.indeterminate==false) + ) + { + //check if children are selected: + var parentElem=inpElem.parentElement; + var inpChildren = parentElem.getElementsByTagName('input'); + + if(inpChildren && inpChildren.length>0) + { + for(var i=0;i"; @@ -435,6 +471,8 @@ function ndSichtEintraegeSuchen(was) { } + +