/** * Update the types associated with a given service. Currently, this will clobber all types * associated with the given service. * * @param service * @param serviceDef */ public void updateServiceTypes( Service service, ServiceDefinition serviceDef, String username, String password) { // salesforce if (service.getDataobjects() == null) { service.setDataobjects(new DataObjects()); } List<DataObject> dos = service.getDataobjects().getDataobject(); dos.clear(); List<TypeDefinition> elementTypes; if (service.getId().equals(CommonConstants.SALESFORCE_SERVICE)) { elementTypes = serviceDef.getLocalTypes(username, password); } else { elementTypes = serviceDef.getLocalTypes(); } for (TypeDefinition et : elementTypes) { // No need to check the existence of the types in other services as there is no problem if // there are two services using same dataObjects. /*if (findDataObjectFromJavaType(et.getTypeName()) != null) { throw new WMRuntimeException("Conflicting java type: " + et.getTypeName()); }*/ DataObject dso = new DataObject(); dos.add(dso); dso.setJavaType(et.getTypeName()); dso.setName(et.getShortName()); dso.setSupportsQuickData(et.isLiveService()); if (et instanceof ObjectTypeDefinition) { ObjectTypeDefinition otd = (ObjectTypeDefinition) et; List<Element> dsoelems = dso.getElement(); for (Map.Entry<String, FieldDefinition> entry : otd.getFields().entrySet()) { Element e = new Element(); dsoelems.add(e); if (0 != entry.getKey().compareTo(entry.getValue().getName())) { throw new WMRuntimeException( "key: " + entry.getKey() + " != " + entry.getValue().getName()); } // key or value.name? e.setName(entry.getKey()); if (entry.getValue().getTypeDefinition() != null) { e.setTypeRef(entry.getValue().getTypeDefinition().getTypeName()); } e.setIsList(entry.getValue().getDimensions() > 0); e.setAllowNull(entry.getValue().isAllowNull()); e.setSubType(entry.getValue().getSubType()); // salesforce for (OperationEnumeration oe : entry.getValue().getRequire()) { e.getRequire().add(oe); } for (OperationEnumeration oe : entry.getValue().getExclude()) { e.getExclude().add(oe); } for (OperationEnumeration oe : entry.getValue().getNoChange()) { e.getNoChange().add(oe); } } } } }