|
From: Hirzel P. <ph...@us...> - 2006-05-08 23:43:36
|
Update of /cvsroot/tcotool/TCO-Tool/src/org/tcotool/tools In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5337/src/org/tcotool/tools Modified Files: ModelUtility.java Log Message: Major changes Index: ModelUtility.java =================================================================== RCS file: /cvsroot/tcotool/TCO-Tool/src/org/tcotool/tools/ModelUtility.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ModelUtility.java 22 Dec 2005 12:34:40 -0000 1.8 --- ModelUtility.java 7 May 2006 14:57:27 -0000 1.9 *************** *** 16,25 **** --- 16,32 ---- */ + import java.net.URL; + import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; + import java.util.List; + import java.util.Locale; + import java.util.Map; import java.util.Set; import ch.softenvironment.jomm.DbObjectServer; import ch.softenvironment.jomm.mvc.model.DbChangeableBean; + import ch.softenvironment.jomm.mvc.model.DbEnumeration; + import ch.softenvironment.jomm.target.xml.XmlObjectServer; import ch.softenvironment.util.AmountFormat; import ch.softenvironment.util.StringUtils; *************** *** 36,39 **** --- 43,47 ---- import javax.swing.Icon; + import javax.swing.ImageIcon; /** * Utility Class that knows how to <b>deal with Model (and TreeNode's)</b>. *************** *** 43,49 **** --- 51,59 ---- */ public class ModelUtility implements ch.softenvironment.view.tree.TreeNodeUtility { + public static final Long EXPENDABLE_DURATION = new Long(12); // 12 month private TcoModel model = null; private String file = null; private Diagram dependencyDiagram = null; + private Map iconMap = new HashMap(); /** *************** *** 71,75 **** this.model = model; this.file = file; ! fixModel(model); } /** --- 81,100 ---- this.model = model; this.file = file; ! ! //TODO remove obsolete code: fix older configuration XSD-Schema ! List causes = model.getObjectServer().retrieveCodes(CostCause.class); ! if (causes.size() == 0) { ! // assume CodeType's not yet transformed at least once => ignore BUG: recreation if user removes all these Code's ! createDefaultCostCauses((XmlObjectServer)model.getObjectServer(), getCodeTypeLocale()); ! } /*else { ! Iterator it = causes.iterator(); ! while (it.hasNext()) { ! CostCause cause = (CostCause)it.next(); ! if (cause.getDirect() == null) { ! cause.setDirect(Boolean.FALSE); ! } ! } ! }*/ ! fixModel(model); } /** *************** *** 125,129 **** // reverse link: element to owner ((Occurance)element).setDriverId(((CostDriver)owner).getId()); ! } else { // sub-package java.util.List ownedElement = new java.util.ArrayList(((TcoPackage)owner).getOwnedElement()); --- 150,161 ---- // reverse link: element to owner ((Occurance)element).setDriverId(((CostDriver)owner).getId()); ! } else if (element instanceof Course) { ! java.util.List course = new java.util.ArrayList(((SystemParameter)owner).getCourse()); ! course.add(element); ! ((SystemParameter)owner).setCourse(course); ! ! // reverse link: element to owner ! ((Course)element).setSystemParameterId(((SystemParameter)owner).getId()); ! } else { // sub-package java.util.List ownedElement = new java.util.ArrayList(((TcoPackage)owner).getOwnedElement()); *************** *** 191,194 **** --- 223,232 ---- return object; } + /** + * Initialize a NEW role with default values. + * @param role + * @param systemParameter + * @throws Throwable + */ public static void initializeRole(Role role, SystemParameter systemParameter) throws Throwable { role.setInternal(Boolean.TRUE); *************** *** 198,202 **** role.setYearlyHours(systemParameter.getManYearHoursInternal()); if ((role.getFullTimeEquivalent() != null) && (role.getYearlyHours() != null)) { ! role.setHourlyRate(new Double(AmountFormat.round(role.getFullTimeEquivalent().doubleValue() / role.getYearlyHours().doubleValue()))); } } --- 236,240 ---- role.setYearlyHours(systemParameter.getManYearHoursInternal()); if ((role.getFullTimeEquivalent() != null) && (role.getYearlyHours() != null)) { ! role.setHourlyRate(new Double(Calculator.calcHourlyRate(role))); } } *************** *** 243,247 **** --- 281,337 ---- group.setName(ResourceManager.getResource(ModelUtility.class, "CIItPlattform")); } + /** + * CostCause are the most important code in a TCO-Configuration + * because they allow to classify each Cost-factor. + * @param server + * @param locale + * @throws Throwable + * @deprecated (necessary for version <1.4.0) + */ + private static void createDefaultCostCauses(XmlObjectServer server, Locale locale) throws Throwable { + morphEnumeration(server.getIliCode(CostType.class, CostCause.HARDWARE)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.SOFTWARE)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.INSTALLATION)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.INTEGRATION)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.OPERATION)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.OPERATIONHARDWARE)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.OPERATIONSOFTWARE)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.INFRASTRUCTURE)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.SERVICE)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.EDUCATION)); + morphEnumeration(server.getIliCode(CostType.class, CostCause.STORAGE)); + /* + String nlsText[] = new String[]{ ResourceManager.getResource(CostType.class, "CIHardware"), + ResourceManager.getResource(CostCause.class, "CISoftware"), + ResourceManager.getResource(CostCause.class, "CIInstallation"), + ResourceManager.getResource(CostCause.class, "CIIntegration"), + ResourceManager.getResource(CostCause.class, "CIOperaion"), + ResourceManager.getResource(CostCause.class, "CIOperationHardware"), + ResourceManager.getResource(CostCause.class, "CIOperationSoftware"), + ResourceManager.getResource(CostCause.class, "CIInfrastructure"), + ResourceManager.getResource(CostCause.class, "CIService"), + ResourceManager.getResource(CostCause.class, "CIEducation"), + ResourceManager.getResource(CostCause.class, "CIStorage") + }; + server.mapCodes(CostCause.class, nlsText, locale); + */ + } + /** + * Morph given enumeration into a new instance of dbCode. + * @param enumeration + * @param dbCode + * @return + * @deprecated (see #fixModel()) + */ + private static CostCause morphEnumeration(DbEnumeration enumeration) throws Throwable { + CostCause cause = (CostCause)enumeration.getObjectServer().createInstance(CostCause.class); + cause.setName(enumeration.getName()); + cause.setIliCode(enumeration.getIliCode()); + cause.setDirect(Boolean.FALSE); + cause.save(); + enumeration.getObjectServer().cacheCode(cause); + return cause; + } /** * Return the client of a Dependency. *************** *** 429,434 **** */ public void fixModel(TcoObject owner) throws Throwable { if (owner instanceof TcoPackage) { ! java.util.Iterator it = ((TcoPackage)owner).getOwnedElement().iterator(); while (it.hasNext()) { TcoPackage ownedElement = (TcoPackage)it.next(); --- 519,546 ---- */ public void fixModel(TcoObject owner) throws Throwable { + List causes = owner.getObjectServer().retrieveCodes(CostCause.class); + Iterator it = causes.iterator(); + while (it.hasNext()) { + CostCause cause = (CostCause)it.next(); + if (cause.getDirect() == null) { + cause.setDirect(Boolean.FALSE); + } + } + it = owner.getObjectServer().retrieveCodes(Catalogue.class).iterator(); + while (it.hasNext()) { + Catalogue catalogue = (Catalogue)it.next(); + if (catalogue.getExpendable() == null) { + catalogue.setExpendable(Boolean.FALSE); + } + if (catalogue.getUsageDuration() == null) { + catalogue.setUsageDuration(new Long(ReportTool.getUsageDuration())); + } + if (catalogue.getDepreciationDuration() == null) { + catalogue.setDepreciationDuration(new Long(ReportTool.getDepreciationDuration())); + } + } + if (owner instanceof TcoPackage) { ! it = ((TcoPackage)owner).getOwnedElement().iterator(); while (it.hasNext()) { TcoPackage ownedElement = (TcoPackage)it.next(); *************** *** 441,445 **** } } else if (owner instanceof Service) { ! java.util.Iterator it = ((Service)owner).getDriver().iterator(); while (it.hasNext()) { CostDriver driver = (CostDriver)it.next(); --- 553,557 ---- } } else if (owner instanceof Service) { ! it = ((Service)owner).getDriver().iterator(); while (it.hasNext()) { CostDriver driver = (CostDriver)it.next(); *************** *** 450,453 **** --- 562,579 ---- cost.setEstimated(Boolean.FALSE); } + if (cost.getType() != null) { + // <= V1.4.0 instances => morph CostType into CostCause + String iliCode = cost.getType().getIliCode(); + Iterator itCauses = causes.iterator(); + while (itCauses.hasNext()) { + CostCause code = (CostCause)itCauses.next(); + if (iliCode.equals(code.getIliCode())) { + Tracer.getInstance().debug(this, "fixModel()", "Morph enum: " + cost.getType().getNameString() + " => code: " + code.getNameString()); + cost.setCause(code); + cost.setType(null); + break; + } + } + } if (cost instanceof PersonalCost) { PersonalCost pCost = (PersonalCost)cost; *************** *** 517,522 **** * if its Role changed. * @param cost */ ! public static void updateRole(PersonalCost cost) { if (cost.getRole() != null) { Role role = cost.getRole(); --- 643,649 ---- * if its Role changed. * @param cost + * @return boolean (true->FTE manYear relevant; false->otherwise) */ ! public static boolean updateRole(PersonalCost cost) { if (cost.getRole() != null) { Role role = cost.getRole(); *************** *** 525,540 **** cost.setInternal(role.getInternal()); if ((cost.getHourlyRate() != null) && (cost.getHours() != null)) { ! // calc cost.setAmount(new Double(AmountFormat.round(cost.getHourlyRate().doubleValue() * cost.getHours().doubleValue()))); } else { ! // use FTE because whole salary is assumed cost.setAmount(role.getFullTimeEquivalent()); } } } public static void updateCatalogue(FactCost cost) { if (cost.getCatalogue() != null) { cost.setAmount(cost.getCatalogue().getPrice()); cost.setCurrency(cost.getCatalogue().getCurrency()); } } --- 652,677 ---- cost.setInternal(role.getInternal()); if ((cost.getHourlyRate() != null) && (cost.getHours() != null)) { ! // calc hourlyRate*hours cost.setAmount(new Double(AmountFormat.round(cost.getHourlyRate().doubleValue() * cost.getHours().doubleValue()))); } else { ! // use FTE because whole salary is assumed cost.setAmount(role.getFullTimeEquivalent()); + return true; } } + return false; } + /** + * Reuse price and duration of Catalogue. + * @param cost + */ public static void updateCatalogue(FactCost cost) { if (cost.getCatalogue() != null) { cost.setAmount(cost.getCatalogue().getPrice()); cost.setCurrency(cost.getCatalogue().getCurrency()); + cost.setUsageDuration(cost.getCatalogue().getUsageDuration()); + cost.setDepreciationDuration(cost.getCatalogue().getDepreciationDuration()); + // by default Catalogue parts are known in price exactly + cost.setEstimated(Boolean.FALSE); } } *************** *** 542,577 **** * Returns the appropriate icon for node Element. */ ! public Icon getIcon(Object node, boolean expanded) { ! String fileName = null; ! boolean imported = //(((TcoObject) node).getReference() == null) ! !((TcoObject)node).getObjectServer().equals(((TcoModel)getRoot()).getObjectServer()); ! ! if (node instanceof TcoPackage) { ! if (imported) { ! if (expanded) { ! fileName = "package_imported_opened.png"; ! } else { ! fileName = "package_imported_closed.png"; ! } ! } // else null for default Tree package-symbol ! } else if (node instanceof org.tcotool.model.Service) { ! if (imported) { ! fileName = "service_imported.png"; ! } else { ! fileName = "Service.png"; } - } else { - fileName = StringUtils.getPureClassName(node) + ".png"; } ! try { ! if (fileName != null) { ! return ch.ehi.basics.i18n.ResourceBundle.getImageIcon(ModelUtility.class, fileName); ! } ! } catch (NullPointerException e) { ! ch.softenvironment.util.Tracer.getInstance().developerError(this, "getIcon(..)", "image not found for =>" + node.toString()); } - // => default for e.g. javax.swing.UIManager.getIcon("Tree.closedIcon"); - return null; } /** --- 679,719 ---- * Returns the appropriate icon for node Element. */ ! public Icon getIcon(Class type, boolean expanded) { ! URL url = getImageURL(type); ! if (url != null) { ! try { ! return new ImageIcon(url); ! } catch (Exception e) { ! ch.softenvironment.util.Tracer.getInstance().developerError(this, "getIcon(..)", "image not found for =>" + type); } } ! return null; ! } ! public void setImageURL(Class key, URL url) { ! iconMap.put(key, url); ! } ! public URL getImageURL(Class key) { try { ! if (iconMap.containsKey(key)) { ! return (URL)iconMap.get(key); ! } else { ! if (key.equals(TcoPackage.class) || key.equals(TcoModel.class)) { ! return null; // leave it to default Tree behaviour ! } else { ! String fileName = StringUtils.getPureClassName(key); ! //TODO IMPORT ! /* ! if (!((TcoObject)node).getObjectServer().equals(((TcoModel)getRoot()).getObjectServer())) { ! fileName = fileName + "_imported"; ! } ! */ ! setImageURL(key, ch.ehi.basics.i18n.ResourceBundle.getURL(ModelUtility.class, fileName + ".png")); ! return (URL)iconMap.get(key); ! } ! } ! } catch(Exception e) { ! ch.softenvironment.util.Tracer.getInstance().developerError(this, "getImageURL(..)", "image not found for =>" + key); ! return null; } } /** *************** *** 644,651 **** return ResourceManager.getResource(PersonalCostDetailView.class, "FrmWindow_text"); // DbEnumeration's ! } else if (type.equals(CostType.class)) { return ResourceManager.getResource(CostDriverDetailView.class, "TbcCosttype_text", false); // DbCode's } else if (type.equals(ServiceCategory.class)) { return ResourceManager.getResource(ServiceDetailView.class, "LblCategory_text", false); } else if (type.equals(Responsibility.class)) { --- 786,795 ---- return ResourceManager.getResource(PersonalCostDetailView.class, "FrmWindow_text"); // DbEnumeration's ! } else if (type.equals(CostCause.class)) { return ResourceManager.getResource(CostDriverDetailView.class, "TbcCosttype_text", false); // DbCode's } else if (type.equals(ServiceCategory.class)) { + //TODO HACK + //return "Clinical Symptom"; return ResourceManager.getResource(ServiceDetailView.class, "LblCategory_text", false); } else if (type.equals(Responsibility.class)) { *************** *** 657,660 **** --- 801,806 ---- } else if (type.equals(ProjectPhase.class)) { return ResourceManager.getResource(CostDriverDetailView.class, "LblPhase_text", false); + } else if (type.equals(LifeCycle.class)) { + return ResourceManager.getResource(CostDriverDetailView.class, "LblCycle_text", false); } else if (type.equals(Site.class)) { return ResourceManager.getResource(CostDriverDetailView.class, "LblSite_text", false); *************** *** 775,785 **** } /** ! * Register the default DbCode's. * @throws Throwable */ private static void mapDefaultCodes(ch.softenvironment.jomm.target.xml.XmlObjectServer server, SystemParameter sysPar) throws Throwable { //TODO NLS-translations ! java.util.Locale locale = java.util.Locale.GERMAN; String nlsText[] = new String[]{ "System-Service", "Security-Service", --- 921,941 ---- } /** ! * Return the Locale for NLS-Codes. ! * @deprecated (JOMM does not suppert multiple NLS-Settings yet!) ! */ ! private static Locale getCodeTypeLocale() { ! //TODO replace by proper JOMM-Mechanism ! return java.util.Locale.GERMAN; ! } ! /** ! * Register the default DbCode's for new Configurations. * @throws Throwable */ private static void mapDefaultCodes(ch.softenvironment.jomm.target.xml.XmlObjectServer server, SystemParameter sysPar) throws Throwable { //TODO NLS-translations ! java.util.Locale locale = getCodeTypeLocale(); + createDefaultCostCauses(server, locale); + String nlsText[] = new String[]{ "System-Service", "Security-Service", *************** *** 869,904 **** } /** ! * Register the default DbEnumeration's. */ public static void mapEnumerations(ch.softenvironment.jomm.target.xml.XmlObjectServer server) { ! // define default DbEnumertion's ! java.util.Locale locale = java.util.Locale.GERMAN; - //TODO morph DbEnumeration CostType into a DbCode - server.createEnumeration(CostType.class, CostType.HARDWARE, locale, ResourceManager.getResource(CostType.class, "CIHardware")); - server.createEnumeration(CostType.class, CostType.SOFTWARE, locale, ResourceManager.getResource(CostType.class, "CISoftware")); - server.createEnumeration(CostType.class, CostType.INSTALLATION, locale, ResourceManager.getResource(CostType.class, "CIInstallation")); - server.createEnumeration(CostType.class, CostType.INTEGRATION, locale, ResourceManager.getResource(CostType.class, "CIIntegration")); - server.createEnumeration(CostType.class, CostType.OPERATION, locale, ResourceManager.getResource(CostType.class, "CIOperaion")); - server.createEnumeration(CostType.class, CostType.OPERATIONHARDWARE, locale, ResourceManager.getResource(CostType.class, "CIOperationHardware")); - server.createEnumeration(CostType.class, CostType.OPERATIONSOFTWARE, locale, ResourceManager.getResource(CostType.class, "CIOperationSoftware")); - server.createEnumeration(CostType.class, CostType.INFRASTRUCTURE, locale, ResourceManager.getResource(CostType.class, "CIInfrastructure")); - server.createEnumeration(CostType.class, CostType.SERVICE, locale, ResourceManager.getResource(CostType.class, "CIService")); - server.createEnumeration(CostType.class, CostType.EDUCATION, locale, ResourceManager.getResource(CostType.class, "CIEducation")); - server.createEnumeration(CostType.class, CostType.STORAGE, locale, ResourceManager.getResource(CostType.class, "CIStorage")); - /* - // Buruli-Configuration only ! - server.createEnumeration(CostType.class, "DC_Bandage", locale, "DC:Bandage"); - server.createEnumeration(CostType.class, "DC_Surgery", locale, "DC:Surgery"); - server.createEnumeration(CostType.class, "DC_Physiotherapie", locale, "DC:Physiotherapie"); - server.createEnumeration(CostType.class, "DC_SkinTransplantation", locale, "DC:Skin Transplantation"); - server.createEnumeration(CostType.class, "DC_Nutrition", locale, "DC:Nutrition"); - server.createEnumeration(CostType.class, "DC_Cleaning", locale, "DC:Cleaning"); - server.createEnumeration(CostType.class, "IC_Wages", locale, "IC:Wages"); - server.createEnumeration(CostType.class, "IC_ExpensesAlesForAyos", locale, "IC:Expenses (ALES for Ayos)"); - server.createEnumeration(CostType.class, "IC_Energy", locale, "IC:Energy"); - server.createEnumeration(CostType.class, "IC_AdministrationAles", locale, "IC:Administration ALES"); - server.createEnumeration(CostType.class, "IC_Depreciation", locale, "IC:Depreciation"); - */ server.createEnumeration(Branch.class, Branch.GOVERNMENT, locale, ResourceManager.getResource(Branch.class, "EnumGOVERNMENT")); server.createEnumeration(Branch.class, Branch.BANKINSURANCE, locale, ResourceManager.getResource(Branch.class, "EnumBANKINSURANCE")); --- 1025,1049 ---- } /** ! * Register the default DbEnumeration's which are the same ! * for all Configuration. */ public static void mapEnumerations(ch.softenvironment.jomm.target.xml.XmlObjectServer server) { ! // define default DbEnumeration's ! //TODO implement DbEnumeration according to proper NLS-Language ! java.util.Locale locale = getCodeTypeLocale(); ! ! //TODO OBSOLETE DbEnumeration CostType ! server.createEnumeration(CostType.class, CostCause.HARDWARE, locale, ResourceManager.getResource(CostCause.class, "CIHardware")); ! server.createEnumeration(CostType.class, CostCause.SOFTWARE, locale, ResourceManager.getResource(CostCause.class, "CISoftware")); ! server.createEnumeration(CostType.class, CostCause.INSTALLATION, locale, ResourceManager.getResource(CostCause.class, "CIInstallation")); ! server.createEnumeration(CostType.class, CostCause.INTEGRATION, locale, ResourceManager.getResource(CostCause.class, "CIIntegration")); ! server.createEnumeration(CostType.class, CostCause.OPERATION, locale, ResourceManager.getResource(CostCause.class, "CIOperaion")); ! server.createEnumeration(CostType.class, CostCause.OPERATIONHARDWARE, locale, ResourceManager.getResource(CostCause.class, "CIOperationHardware")); ! server.createEnumeration(CostType.class, CostCause.OPERATIONSOFTWARE, locale, ResourceManager.getResource(CostCause.class, "CIOperationSoftware")); ! server.createEnumeration(CostType.class, CostCause.INFRASTRUCTURE, locale, ResourceManager.getResource(CostCause.class, "CIInfrastructure")); ! server.createEnumeration(CostType.class, CostCause.SERVICE, locale, ResourceManager.getResource(CostCause.class, "CIService")); ! server.createEnumeration(CostType.class, CostCause.EDUCATION, locale, ResourceManager.getResource(CostCause.class, "CIEducation")); ! server.createEnumeration(CostType.class, CostCause.STORAGE, locale, ResourceManager.getResource(CostCause.class, "CIStorage")); server.createEnumeration(Branch.class, Branch.GOVERNMENT, locale, ResourceManager.getResource(Branch.class, "EnumGOVERNMENT")); server.createEnumeration(Branch.class, Branch.BANKINSURANCE, locale, ResourceManager.getResource(Branch.class, "EnumBANKINSURANCE")); *************** *** 914,917 **** --- 1059,1063 ---- server.createEnumeration(Currency.class, Currency.JPY, locale, "JPY"); server.createEnumeration(Currency.class, Currency.CFA, locale, "CFA"); + server.createEnumeration(Currency.class, Currency.INR, locale, "INR"); server.createEnumeration(CostExponent.class, CostExponent.ASIS, locale, ResourceManager.getResource(CostExponent.class, "CIAsIs")); *************** *** 930,934 **** } /** ! * Move an object from its "owner" to target. * @param object to be moved * @param target new owner --- 1076,1080 ---- } /** ! * Move an object from its "owner" to given target. * @param object to be moved * @param target new owner *************** *** 1050,1054 **** dependency.getObjectServer().deletePersistent(dependency); ! TcoObject supplier = object; //findSupplier(dependency); TcoObject client = findClient(dependency); --- 1196,1200 ---- dependency.getObjectServer().deletePersistent(dependency); ! // TcoObject supplier = object; //findSupplier(dependency); TcoObject client = findClient(dependency); *************** *** 1128,1131 **** --- 1274,1292 ---- } } + public void removeCourse(List courses) throws Throwable { + // 1) unlink owner from element + Iterator it = courses.iterator(); + while (it.hasNext()) { + ((Course)it.next()).setSystemParameterId(null); + } + + // 2) unlink element + java.util.List copy = new java.util.ArrayList(getSystemParameter().getCourse()); + copy.removeAll(courses); + getSystemParameter().setCourse(copy); // triggers node structure + + // 3) remove persistently + ((TcoModel)getRoot()).getObjectServer().deletePersistentAll(courses); + } /** * Return InterestRate according to SystemParameter settings. |