class Models {

	public static Specification copy(Specification specification) {
		Architecture<Resource, Link> sArchitecture = specification.getArchitecture();
		Application<Task, Dependency> sApplication = specification.getApplication();
		Mappings<Task, Resource> sMappings = specification.getMappings();
		Routings<Task, Resource, Link> sRoutings = specification.getRoutings();

		Architecture<Resource, Link> iArchitecture = copy(sArchitecture);
		Application<Task, Dependency> iApplication = copy(sApplication);
		Mappings<Task, Resource> iMappings = copyMappings(sMappings, iArchitecture, iApplication);
		Routings<Task, Resource, Link> iRoutings = copyRoutings(sApplication, sRoutings, iApplication, iArchitecture);

		return new Specification(iApplication, iArchitecture, iMappings, iRoutings);
	}

}