public void saveServiceDefinition(String serviceId) { Resource serviceDefFile = getServiceDefXml(serviceId, false); Service service = getCurrentServiceDefinition(serviceId); Service oldService = null; if (serviceId.equals(CommonConstants.SALESFORCE_SERVICE)) { // For salesforceService, we need to retain service definitions in // the old service definition file. oldService = loadServiceDefinition(serviceId); if (oldService != null) { for (Operation op : oldService.getOperation()) { if (isDeletedQuery(op)) { this.cfg.removeDeletedSFQueries(op.getName()); continue; } service.addOperation(op); } List<DataObject> dataObjects = service.getDataobjects().getDataobject(); for (DataObject dobj : oldService.getDataobjects().getDataobject()) { if (isDeletedSFDataObject(dobj)) { this.cfg.removeDeletedSFDataObjects(dobj.getName()); continue; } dataObjects.add(dobj); } service.setType(oldService.getType()); service.setCRUDService(oldService.getCRUDService()); } } // salesforce try { Marshaller marshaller = definitionsContext.createMarshaller(); marshaller.setProperty("jaxb.formatted.output", true); OutputStream outputStream = this.fileSystem.getOutputStream(serviceDefFile); try { marshaller.marshal(service, outputStream); } finally { try { outputStream.close(); } catch (IOException e) { throw new IllegalStateException("Unable to close service def file", e); } } // XXX MAV-569 should do a real build here, or actually outside // this method maybe SortedSet<Service> s = new TreeSet<Service>(new ServiceComparator()); s.add(service); generateRuntimeConfiguration(s); } catch (JAXBException e) { throw new WMRuntimeException(e); } catch (IOException e) { throw new WMRuntimeException(e); } catch (NoSuchMethodException e) { throw new WMRuntimeException(e); } }
/** * Define the definition of a service; this will destroy any existing configuration associated * with the serviceid. * * @param serviceDef The service definition for the newly defined service. */ @SuppressWarnings("deprecation") public void defineService(ServiceDefinition serviceDef, String username, String password) { try { validateServiceId(serviceDef.getServiceId()); } catch (DuplicateServiceIdException ignore) { // ignore } Service oldService = getService(serviceDef.getServiceId()); Service service = new Service(); /** Copying the service operations to the new service */ if (serviceDef instanceof AbstractDeprecatedServiceDefinition) { // List<String> opNames = // ((AbstractDeprecatedServiceDefinition)serviceDef).getOperationNames(); if (oldService != null) { List<Operation> ops = oldService.getOperation(); if (ops != null) { for (Operation op : ops) { // if(opNames != null && opNames.contains(op.getName())){ service.addOperation(op); // } } } } } getCurrentServiceDefinitions().put(serviceDef.getServiceId(), service); IPwsServiceModifier serviceModifier; if (this.pwsServiceModifierBeanFactory == null || serviceDef.getPartnerName() == null) { serviceModifier = null; } else { serviceModifier = this.pwsServiceModifierBeanFactory.getPwsServiceModifier(serviceDef.getPartnerName()); } try { for (ServiceOperation op : serviceDef.getServiceOperations(serviceModifier)) { doUpdateOperation(op, service, serviceDef, serviceModifier); } service.setId(serviceDef.getServiceId()); service.setType(serviceDef.getServiceType().getTypeName()); service.setCRUDService(serviceDef.isLiveDataService()); if (serviceDef instanceof ReflectServiceDefinition) { service.setClazz(((ReflectServiceDefinition) serviceDef).getServiceClass()); } if (serviceDef.getRuntimeConfiguration() != null) { service.setSpringFile(serviceDef.getRuntimeConfiguration()); } else if (oldService != null && oldService.getSpringFile() != null) { service.setSpringFile(oldService.getSpringFile()); } updateServiceTypes(service, serviceDef, username, password); } catch (WMRuntimeException e) { // if we had an error, remove the service def so we'll use the last // known-good one getCurrentServiceDefinitions().remove(serviceDef.getServiceId()); throw e; } String svcId = service.getId(); // TODO: Skipping salesforce setup when null is passed in for username // is not good programming practice. // TODO: The logic has to be rewritten later when we have time. if (svcId.equals(CommonConstants.SALESFORCE_SERVICE) && username != null) { // salesforce SalesforceHelper.setupSalesforceSrc(this.projectManager, username, password); } defineService(service); }