public boolean updateLocation()

in taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityHealthChecker.java [70:178]


	public boolean updateLocation(ExternalToolActivityConfigurationBean configuration) {
		InvocationGroup invocationGroup = configuration.getInvocationGroup();
		String invocationGroupSpecification = null;
		String invocationMechanismSpecification = null;
		if (invocationGroup != null) {
			if (invocationGroupManager.containsGroup(invocationGroup)) {
				return true;
			}
			InvocationGroup replacementGroup = invocationGroupManager.getGroupReplacement(invocationGroup);
			if (replacementGroup != null) {
				configuration.setInvocationGroup(replacementGroup);
				return true;
			}
			invocationGroupSpecification = invocationGroup.getName() + ":" + invocationGroup.getMechanismXML();
			InvocationGroup importedGroup = invocationGroupManager.getImportedGroup(invocationGroupSpecification);
			if (importedGroup != null) {
				configuration.setInvocationGroup(importedGroup);
				return true;
			}
		}

		InvocationMechanism invocationMechanism = configuration.getMechanism();
		if (invocationMechanism != null) {
			if (invocationGroupManager.containsMechanism(invocationMechanism)) {
				return true;
			}
		}
		String mechanismXML = null;
		String mechanismName = null;

		if (invocationGroup != null) {
			mechanismXML = invocationGroup.getMechanismXML();
			mechanismName = invocationGroup.getMechanismName();
		} else {
			mechanismXML = configuration.getMechanismXML();
			mechanismName = configuration.getMechanismName();
		}
		invocationMechanismSpecification = mechanismName + ":" + mechanismXML;

		InvocationMechanism foundMechanism = null;
		HashSet<String> mechanismNames = new HashSet<String>();
		for (InvocationMechanism mechanism : invocationGroupManager.getMechanisms()) {
			mechanismNames.add(mechanism.getName());
			if (mechanism.getName().equals(mechanismName) && (mechanism.getXML().equals(mechanismXML))) {
				if (invocationMechanism != mechanism) {
					foundMechanism = mechanism;
				}
			}
		}

		if (foundMechanism == null) {
			foundMechanism = invocationGroupManager.getMechanismReplacement(invocationMechanismSpecification);
			if (foundMechanism == null) {
				foundMechanism = invocationGroupManager.getImportedMechanism(invocationMechanismSpecification);
			}
		}

		if (foundMechanism != null) {
			if (invocationGroup != null) {
				invocationGroup.setMechanism(foundMechanism);
				// Cannot return because invocationGroup is still unknown
			} else {
				configuration.setMechanism(foundMechanism);
				return true;
			}
		}

		if (foundMechanism == null) {
			InvocationMechanism createdMechanism;
			if (invocationGroup != null) {
				invocationGroup.convertDetailsToMechanism();
				createdMechanism = invocationGroup.getMechanism();
			} else {
				configuration.convertDetailsToMechanism();
				createdMechanism = configuration.getMechanism();
			}

			String chosenMechanismName = Tools.uniqueObjectName(mechanismName,
					mechanismNames);
			createdMechanism.setName(chosenMechanismName);
			if (invocationGroup != null) {
				invocationGroup.setMechanism(createdMechanism);
			} else {
				configuration.setMechanism(createdMechanism);
			}
			invocationGroupManager.importMechanism(invocationMechanismSpecification, createdMechanism);


			if (invocationGroup == null) {
				return true;
			}
		}

		InvocationGroup foundGroup = null;
		HashSet<String> groupNames = new HashSet<String>();
		for (InvocationGroup group : invocationGroupManager.getInvocationGroups()) {
			groupNames.add(group.getName());
			if (group.getName().equals(invocationGroup.getName()) && (group.getMechanism() == invocationGroup.getMechanism())) {
				foundGroup = group;
			}
		}
		if (foundGroup != null) {
			configuration.setInvocationGroup(foundGroup);
			return true;
		}
		invocationGroup.setName(Tools.uniqueObjectName(invocationGroup.getName(), groupNames));
		invocationGroupManager.importInvocationGroup(invocationGroupSpecification, invocationGroup);
		return true;
	}