package er.reporting; import java.util.Enumeration; import com.webobjects.appserver.WOComponent; import com.webobjects.appserver.WOContext; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSMutableArray; import com.webobjects.foundation.NSNotificationCenter; import er.grouping.DRAttribute; import er.grouping.DRAttributeGroup; import er.grouping.DRReportModel; public class WRAttributeListEditor extends WOComponent implements DRAttributeEditing { protected NSArray _attributeList; protected String attributeUpdateAction; public DRAttribute attribute; protected int currentIndexAtt; protected int currentLevelAtt; public WRAttributeListEditor(WOContext c){ super(c); } // CHECKME ak This can not be working!! We will mess seriously when we have several users and one edits this list public void resetAttributes() { NSNotificationCenter.defaultCenter().postNotification(DRReportModel.DRReportModelUpdateNotification, null, null); } @Override public void reset() { _attributeList = null; } public NSArray attributeList() { return _attributeList; } public void setAttributeList(NSArray v) { _attributeList = v; } public NSArray attributeSubList() { if (attribute.isGroup()) { return attribute.attributes(); } return null; } public void toggleGroupInList(DRAttribute att) { int curDex; DRAttribute newAtt; NSMutableArray arr = new NSMutableArray(attributeList()); curDex = arr.indexOfObject(att); if (att.isGroup()) { newAtt = DRAttribute.withKeyPathFormatLabelTotalUserInfo(att.keyPath(), att.format(), att.label(), att.shouldTotal(), att.userInfo()); } else { newAtt = DRAttributeGroup.withKeyPathFormatLabelTotalListUserInfo(att.keyPath(), att.format(), att.label(), att.shouldTotal(), new NSMutableArray(), att.userInfo()); } arr.insertObjectAtIndex(newAtt, curDex); arr.removeObjectAtIndex(curDex+1); setAttributeList(arr); } public void addObjectToList() { NSMutableArray arr = new NSMutableArray(attributeList()); arr.addObject(DRAttribute.withKeyPathFormatLabelTotalUserInfo("keypath", null, "Label", false, null)); setAttributeList(arr); } public Object add() { addObjectToList(); return null; } public String attribLabel() { return attribute.label(); } public NSMutableArray newArraySans(NSArray arr1, Object member) { NSMutableArray arr = new NSMutableArray(); Enumeration en = arr1.objectEnumerator(); while (en.hasMoreElements()) { DRAttribute att = (DRAttribute)en.nextElement(); if (!att.equals(member)) { arr.addObject(att); } } return arr; } public NSArray moveUpArray(DRAttribute member, boolean up, NSArray arr1) { int cnt; int cur = arr1.indexOfObject(member); NSMutableArray arr = newArraySans(arr1, member); cnt = arr.count(); if (up) { int newdex = cur-1; if (newdex < 0) { arr.addObject(member); } else { arr.insertObjectAtIndex(member, newdex); } } else { int newdex = cur+1; if (newdex > cnt) { arr.insertObjectAtIndex(member, 0); } else { arr.insertObjectAtIndex(member, newdex); } } return arr; } public void deleteSubAttribute(DRAttribute subAttribute) { setAttributeList(newArraySans(attributeList(), subAttribute)); } public void moveSubAttributeUp(DRAttribute subAtt, boolean up) { setAttributeList(moveUpArray(subAtt, up, attributeList())); } public Object regenReport() { resetAttributes(); if (attributeUpdateAction != null) { return performParentAction(attributeUpdateAction); } return null; } }