/**
* <copyright>
* </copyright>
*
*
*/
package org.dresdenocl.language.ocl.resource.ocl.mopp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import org.eclipse.emf.common.util.URI;
/**
* <p>
* A basic implementation of the
* org.dresdenocl.language.ocl.resource.ocl.IOclReferenceResolveResult interface
* that collects mappings in a list.
* </p>
*
* @param <ReferenceType> the type of the references that can be contained in this
* result
*/
public class OclReferenceResolveResult<ReferenceType> implements org.dresdenocl.language.ocl.resource.ocl.IOclReferenceResolveResult<ReferenceType> {
private Collection<org.dresdenocl.language.ocl.resource.ocl.IOclReferenceMapping<ReferenceType>> mappings;
private String errorMessage;
private boolean resolveFuzzy;
private Set<org.dresdenocl.language.ocl.resource.ocl.IOclQuickFix> quickFixes;
public OclReferenceResolveResult(boolean resolveFuzzy) {
super();
this.resolveFuzzy = resolveFuzzy;
}
public String getErrorMessage() {
return errorMessage;
}
public Collection<org.dresdenocl.language.ocl.resource.ocl.IOclQuickFix> getQuickFixes() {
if (quickFixes == null) {
quickFixes = new LinkedHashSet<org.dresdenocl.language.ocl.resource.ocl.IOclQuickFix>();
}
return Collections.unmodifiableSet(quickFixes);
}
public void addQuickFix(org.dresdenocl.language.ocl.resource.ocl.IOclQuickFix quickFix) {
if (quickFixes == null) {
quickFixes = new LinkedHashSet<org.dresdenocl.language.ocl.resource.ocl.IOclQuickFix>();
}
quickFixes.add(quickFix);
}
public Collection<org.dresdenocl.language.ocl.resource.ocl.IOclReferenceMapping<ReferenceType>> getMappings() {
return mappings;
}
public boolean wasResolved() {
return mappings != null;
}
public boolean wasResolvedMultiple() {
return mappings != null && mappings.size() > 1;
}
public boolean wasResolvedUniquely() {
return mappings != null && mappings.size() == 1;
}
public void setErrorMessage(String message) {
errorMessage = message;
}
public void addMapping(String identifier, ReferenceType target) {
if (!resolveFuzzy && target == null) {
throw new IllegalArgumentException("Mapping references to null is only allowed for fuzzy resolution.");
}
addMapping(identifier, target, null);
}
public void addMapping(String identifier, ReferenceType target, String warning) {
if (mappings == null) {
mappings = new ArrayList<org.dresdenocl.language.ocl.resource.ocl.IOclReferenceMapping<ReferenceType>>(1);
}
mappings.add(new org.dresdenocl.language.ocl.resource.ocl.mopp.OclElementMapping<ReferenceType>(identifier, target, warning));
errorMessage = null;
}
public void addMapping(String identifier, URI uri) {
addMapping(identifier, uri, null);
}
public void addMapping(String identifier, URI uri, String warning) {
if (mappings == null) {
mappings = new ArrayList<org.dresdenocl.language.ocl.resource.ocl.IOclReferenceMapping<ReferenceType>>(1);
}
mappings.add(new org.dresdenocl.language.ocl.resource.ocl.mopp.OclURIMapping<ReferenceType>(identifier, uri, warning));
}
}