All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.optique.api.mapping.impl.PredicateObjectMapImpl Maven / Gradle / Ivy

There is a newer version: 0.4.0
Show newest version
/*******************************************************************************
 * Copyright 2013, the Optique Consortium
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * This first version of the R2RML API was developed jointly at the University of Oslo, 
 * the University of Bolzano, La Sapienza University of Rome, and fluid Operations AG, 
 * as part of the Optique project, www.optique-project.eu
 ******************************************************************************/
package eu.optique.api.mapping.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import eu.optique.api.mapping.GraphMap;
import eu.optique.api.mapping.LibConfiguration;
import eu.optique.api.mapping.ObjectMap;
import eu.optique.api.mapping.PredicateMap;
import eu.optique.api.mapping.PredicateObjectMap;
import eu.optique.api.mapping.RefObjectMap;
import eu.optique.api.mapping.TermMap.TermMapType;

/**
 * An implementation of a PredicateObjectMap.
 * 
 * @author Marius Strandhaug
 */
public class PredicateObjectMapImpl implements PredicateObjectMap {

	ArrayList predList;
	ArrayList objList;
	ArrayList refObjList;
	ArrayList graphList;

	final LibConfiguration lc;
	Object res;

	public PredicateObjectMapImpl(LibConfiguration c, PredicateMap pm,
			ObjectMap om) {

		if (c == null) {
			throw new NullPointerException("LibConfiguration was null.");
		}

		lc = c;

		predList = new ArrayList();
		objList = new ArrayList();
		refObjList = new ArrayList();
		graphList = new ArrayList();

		if (pm == null) {
			throw new NullPointerException(
					"A PredicateObjectMap must have a PredicateMap.");
		} else if (om == null) {
			throw new NullPointerException(
					"A PredicateObjectMap must have an ObjectMap or a RefObjectMap.");
		} else {
			addPredicateMap(pm);
			addObjectMap(om);

			setResource(lc.createBNode());
		}
	}

	public PredicateObjectMapImpl(LibConfiguration c, PredicateMap pm,
			RefObjectMap rom) {

		if (c == null) {
			throw new NullPointerException("LibConfiguration was null.");
		}

		lc = c;

		predList = new ArrayList();
		objList = new ArrayList();
		refObjList = new ArrayList();
		graphList = new ArrayList();

		if (pm == null) {
			throw new NullPointerException(
					"A PredicateObjectMap must have at least one PredicateMap.");
		} else if (rom == null) {
			throw new NullPointerException(
					"A PredicateObjectMap must have an ObjectMap or a RefObjectMap.");
		} else {
			addPredicateMap(pm);
			addRefObjectMap(rom);

			setResource(lc.createBNode());
		}
	}

	public PredicateObjectMapImpl(LibConfiguration c, List pms,
			List oms, List roms) {

		if (c == null) {
			throw new NullPointerException("LibConfiguration was null.");
		}

		lc = c;

		predList = new ArrayList();
		objList = new ArrayList();
		refObjList = new ArrayList();
		graphList = new ArrayList();

		if (pms == null) {
			throw new NullPointerException(
					"A PredicateObjectMap must have at least one PredicateMap.");
		} else if (pms.isEmpty()) {
			throw new IllegalArgumentException(
					"A PredicateObjectMap must have at least one PredicateMap.");
		} else if (oms == null && roms == null) {
			throw new NullPointerException(
					"A PredicateObjectMap must have at least one ObjectMap or RefObjectMap.");
		} else if (oms == null && roms.isEmpty()) {
			throw new IllegalArgumentException(
					"A PredicateObjectMap must have at least one ObjectMap or RefObjectMap.");
		} else if (roms == null && oms.isEmpty()) {
			throw new IllegalArgumentException(
					"A PredicateObjectMap must have at least one ObjectMap or RefObjectMap.");
		} else if (oms != null && roms != null && oms.isEmpty()
				&& roms.isEmpty()) {
			throw new IllegalArgumentException(
					"A PredicateObjectMap must have at least one ObjectMap or RefObjectMap.");
		} else {

			for (PredicateMap pm : pms) {
				addPredicateMap(pm);
			}

			if (oms != null) {
				for (ObjectMap om : oms) {
					addObjectMap(om);
				}
			}

			if (roms != null) {
				for (RefObjectMap rom : roms) {
					addRefObjectMap(rom);
				}
			}

			setResource(lc.createBNode());
		}
	}

	@Override
	public void addPredicateMap(PredicateMap pm) {
		predList.add(pm);
	}

	@Override
	public void addObjectMap(ObjectMap om) {
		objList.add(om);
	}

	@Override
	public void addRefObjectMap(RefObjectMap rom) {
		refObjList.add(rom);
	}

	@Override
	public void addGraphMap(GraphMap gm) {
		graphList.add(gm);
	}

	@Override
	public void addGraphMap(List gms) {
		graphList.addAll(gms);
	}

	@Override
	public GraphMap getGraphMap(int index) {
		return graphList.get(index);
	}

	@Override
	public RefObjectMap getRefObjectMap(int index) {
		return refObjList.get(index);
	}

	@Override
	public ObjectMap getObjectMap(int index) {
		return objList.get(index);
	}

	@Override
	public PredicateMap getPredicateMap(int index) {
		return predList.get(index);
	}

	@Override
	public List getGraphMaps() {
		return Collections.unmodifiableList(graphList);
	}

	@Override
	public List getRefObjectMaps() {
		return Collections.unmodifiableList(refObjList);
	}

	@Override
	public List getObjectMaps() {
		return Collections.unmodifiableList(objList);
	}

	@Override
	public List getPredicateMaps() {
		return Collections.unmodifiableList(predList);
	}

	@Override
	public void removeGraphMap(GraphMap gm) {
		graphList.remove(gm);
	}

	@Override
	public void removeRefObjectMap(RefObjectMap rom) {
		/*
		 * The predicate object map must contain at least one object map or
		 * referencing object map.
		 */
		if (refObjList.size() + objList.size() == 1) {
			throw new IllegalStateException(
					"Can't remove the last ObjectMap or RefObjectMap.");
		}

		refObjList.remove(rom);
	}

	@Override
	public void removeObjectMap(ObjectMap om) {
		/*
		 * The predicate object map must contain at least one object map or
		 * referencing object map.
		 */
		if (objList.size() == 1) {
			throw new IllegalStateException(
					"Can't remove the last ObjectMap or RefObjectMap.");
		}

		objList.remove(om);

	}

	@Override
	public void removePredicateMap(PredicateMap pm) {
		// The predicate object map must contain at least one predicate map.
		if (predList.size() == 1) {
			throw new IllegalStateException(
					"Can't remove the last PredicateMap.");
		}

		predList.remove(pm);

	}

	@Override
	public void setResource(Object r) {
		if (r != null && !lc.getResourceClass().isInstance(r)) {
			throw new IllegalArgumentException("Parameter r is of type "
					+ r.getClass() + ". Should be an instance of "
					+ lc.getResourceClass() + ".");
		} else if (r == null) {
			throw new NullPointerException(
					"A PredicateObjectMap must have a resource.");
		}

		res = r;
	}

	@Override
	public  R getResource(Class resourceClass) {
		return resourceClass.cast(res);
	}

	@Override
	public  Set serialize(Class tripleClass) {
		Set stmtSet = new HashSet();

		stmtSet.add(tripleClass.cast(lc.createTriple(res, lc.getRDFType(),
				lc.createResource(R2RMLVocabulary.TYPE_PREDICATE_OBJECT_MAP))));

		for (PredicateMap pm : predList) {
			if (pm.getTermMapType() == TermMapType.CONSTANT_VALUED) {
				// Use constant shortcut property.
				stmtSet.add(tripleClass.cast(lc.createTriple(res,
						lc.createResource(R2RMLVocabulary.PROP_PREDICATE),
						lc.createResource(pm.getConstant()))));
			} else {
				stmtSet.add(tripleClass.cast(lc.createTriple(res,
						lc.createResource(R2RMLVocabulary.PROP_PREDICATE_MAP),
						pm.getResource(lc.getResourceClass()))));
				stmtSet.addAll(pm.serialize(tripleClass));
			}
		}

		for (ObjectMap om : objList) {
			if (om.getTermMapType() == TermMapType.CONSTANT_VALUED) {
				// Use constant shortcut property.
				if (om.getTermType(lc.getResourceClass()).equals(
						lc.createResource(R2RMLVocabulary.TERM_IRI))) {

					stmtSet.add(tripleClass.cast(lc.createTriple(res,
							lc.createResource(R2RMLVocabulary.PROP_OBJECT),
							lc.createResource(om.getConstant()))));

				} else if (om.getTermType(lc.getResourceClass()).equals(
						lc.createResource(R2RMLVocabulary.TERM_LITERAL))) {

					stmtSet.add(tripleClass.cast(lc.createLiteralTriple(res,
							lc.createResource(R2RMLVocabulary.PROP_OBJECT),
							om.getConstant())));

				}
			} else {
				stmtSet.add(tripleClass.cast(lc.createTriple(res,
						lc.createResource(R2RMLVocabulary.PROP_OBJECT_MAP),
						om.getResource(lc.getResourceClass()))));
				stmtSet.addAll(om.serialize(tripleClass));
			}
		}
		
		for(RefObjectMap rom : refObjList){
			stmtSet.add(tripleClass.cast(lc.createTriple(res, 
					lc.createResource(R2RMLVocabulary.PROP_OBJECT_MAP), 
					rom.getResource(lc.getResourceClass()))));
			stmtSet.addAll(rom.serialize(tripleClass));
		}
		
		for(GraphMap g : graphList){
			if(g.getTermMapType() == TermMapType.CONSTANT_VALUED){
				// Use constant shortcut property.
				stmtSet.add(tripleClass.cast(lc.createTriple(res, 
						lc.createResource(R2RMLVocabulary.PROP_GRAPH), 
						lc.createResource(g.getConstant()))));
			}else{
				stmtSet.add(tripleClass.cast(lc.createTriple(res, 
						lc.createResource(R2RMLVocabulary.PROP_GRAPH_MAP), 
						g.getResource(lc.getResourceClass()))));
				stmtSet.addAll(g.serialize(tripleClass));
			}
		}

		return stmtSet;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((objList == null) ? 0 : objList.hashCode());
		result = prime * result
				+ ((predList == null) ? 0 : predList.hashCode());
		result = prime * result + ((res == null) ? 0 : res.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;

		if (obj == null)
			return false;

		if (!(obj instanceof PredicateObjectMapImpl))
			return false;

		PredicateObjectMapImpl other = (PredicateObjectMapImpl) obj;
		if (objList == null) {
			if (other.objList != null) {
				return false;
			}
		} else if (!objList.equals(other.objList)) {
			return false;
		}

		if (predList == null) {
			if (other.predList != null) {
				return false;
			}
		} else if (!predList.equals(other.predList)) {
			return false;
		}

		if (res == null) {
			if (other.res != null) {
				return false;
			}
		} else if (!res.equals(other.res)) {
			return false;
		}

		return true;
	}

	@Override
	public String toString() {
		return "PredicateObjectMapImpl [predList=" + predList + ", objList="
				+ objList + ", res=" + res + "]";
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy