/*******************************************************************************
* Copyright (c) 2007, 2010 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* E.D.Willink - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.examples.modelregistry.model;
import org.eclipse.emf.common.util.URI;
import org.eclipse.ocl.examples.modelregistry.environment.FileHandle;
/**
* A Registration maintains the binding between an accessor and the URI by which
* the model may be loaded. Registrations are maintained in the hierarchy of
* ProjectRegistry containing FileHandleRegistry containing AccessorRegistry containing Registration.
*/
public class Registration<A extends Accessor<A>> implements Comparable<Registration<?>>
{
private final AccessorRegistry<A> parent;
private final A accessor;
private final URI uri;
private final ModelSerialization modelSerialization;
public Registration(AccessorRegistry<A> parent, A accessor, URI uri, ModelSerialization modelSerialization) {
this.parent = parent;
this.accessor = accessor;
this.uri = uri;
this.modelSerialization = modelSerialization;
}
public int compareTo(Registration<?> registration) {
int comparison = getFileHandleRegistry().compareTo(registration.getFileHandleRegistry());
if (comparison != 0)
return comparison;
return getAccessorName().compareTo(registration.getAccessorName());
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Registration<?>))
return false;
if (!getAccessorName().equals(((Registration<?>)obj).getAccessorName()))
return false;
if (!getSerializationName().equals(((Registration<?>)obj).getSerializationName()))
return false;
if (!getURI().equals(((Registration<?>)obj).getURI()))
return false;
return true;
}
public A getAccessor() { return accessor; }
public String getAccessorName() { return getAccessor().getName(); }
public AccessorRegistry<A> getAccessorRegistry() { return parent; }
public FileHandle getFileHandle() { return parent.getFileHandle(); }
public FileHandleRegistry getFileHandleRegistry() { return parent.getFileHandleRegistry(); }
public String getModelKindName() { return modelSerialization.getName(); }
public Accessor.Namespace<A> getNamespace() { return accessor.getNamespace(); }
public ModelSerialization getSerialization() { return modelSerialization; }
public String getSerializationName() { return modelSerialization.getName(); }
public URI getURI() { return uri; }
public String getURIString() { return URI.decode(getURI().toString()); }
@Override
public int hashCode() {
return uri.hashCode() + 55;
}
@Override public String toString() {
return getAccessorName() + " -> " + getURIString();
}
}