/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package org.apache.stanbol.entityhub.core.impl;
import java.util.Date;
import org.apache.stanbol.entityhub.servicesapi.defaults.NamespaceEnum;
import org.apache.stanbol.entityhub.servicesapi.model.Entity;
import org.apache.stanbol.entityhub.servicesapi.model.Representation;
/**
* Abstract super class for all Wrappers over Entities managed by the Entityhub.
* Provides also getter and setter for some general purpose metadata.
* @author Rupert Westenthaler
*/
public abstract class EntityWrapper {
protected final Entity wrappedEntity;
public EntityWrapper(Entity entity) {
if(entity == null){
throw new IllegalArgumentException("The parsed Entity MUST NOT be NULL");
}
this.wrappedEntity = entity;
}
/**
* Getter for the wrapped Entity
* @return the wrapped entity
*/
public final Entity getWrappedEntity() {
return wrappedEntity;
}
/**
* Setter for the creation date of this mapping.<p>
* Note this is store in the metadata.
* @param date the date
*/
public final void setCreated(Date date) {
if(date != null){
wrappedEntity.getMetadata().set(NamespaceEnum.dcTerms+"created", date);
}
}
/**
* Getter for the creation date of this mapping
* TODO: decide if that should be stored in the data or the metadata
* @return the creation date.
*/
public final Date getCreated() {
return wrappedEntity.getMetadata().getFirst(NamespaceEnum.dcTerms+"created", Date.class);
}
/**
* Setter for the modified date (replaces existing values)
* @param date the new date
*/
public void setModified(Date date) {
if(date != null){
wrappedEntity.getMetadata().set(NamespaceEnum.dcTerms+"modified", date);
}
}
/**
* Getter for the last modified date
* @return the date of the last modification
*/
public final Date getModified() {
return wrappedEntity.getMetadata().getFirst(NamespaceEnum.dcTerms+"modified", Date.class);
}
/**
* Adds a link to a contributor (e.g. a site where some information where
* imported)
* @param reference the contributor
*/
public final void addContributorLink(String reference) {
if(reference != null && !reference.isEmpty()){
wrappedEntity.getMetadata().addReference(NamespaceEnum.dcTerms+"contributor", reference);
}
}
/**
* Removes a reference to a contributor
* @param reference the contributor
*/
public final void removeContributorLink(String reference) {
wrappedEntity.getMetadata().removeReference(NamespaceEnum.dcTerms+"contributor", reference);
}
/**
* Adds a name to a contributor (e.g. a site where some information where
* imported)
* @param name the contributor
*/
public final void addContributorName(String name) {
if(name != null && !name.isEmpty()){
wrappedEntity.getMetadata().addNaturalText(NamespaceEnum.dcTerms+"contributor", name);
}
}
/**
* Removes a contributor
* @param name the contributor
*/
public final void removeContributorName(String name) {
wrappedEntity.getMetadata().removeNaturalText(NamespaceEnum.dcTerms+"contributor", name);
}
/**
* Adds a reference to the creator to the entity (metadata)
* @param reference the creator
*/
public final void addCreatorLink(String reference) {
if(reference != null && !reference.isEmpty()){
wrappedEntity.getMetadata().addReference(NamespaceEnum.dcTerms+"creator", reference);
}
}
/**
* Removes a link to the creator
* @param reference the creator
*/
public final void removeCreatorLink(String reference) {
wrappedEntity.getMetadata().removeReference(NamespaceEnum.dcTerms+"creator", reference);
}
/**
* Adds a name to the creator to the entity (metadata)
* @param name the creator
*/
public final void addCreatorName(String name) {
if(name != null && !name.isEmpty()){
wrappedEntity.getMetadata().addNaturalText(NamespaceEnum.dcTerms+"creator", name);
}
}
/**
* Removes a creator
* @param name the creator
*/
public final void removeCreatorName(String name) {
wrappedEntity.getMetadata().removeNaturalText(NamespaceEnum.dcTerms+"creator", name);
}
/**
* Adds an attribution to the metadata of the entity
* @param text the attribution
* @param lang the language of the attribution (optional)
*/
public final void addAttributionText(String text,String lang){
if(text != null && !text.isEmpty()){
wrappedEntity.getMetadata().addNaturalText(NamespaceEnum.cc+"attributionName", text,lang);
wrappedEntity.getMetadata().addReference(NamespaceEnum.rdf+"type", NamespaceEnum.cc+"Work");
}
}
/**
* Adds an link to the attribution to the metadata of the entity
* @param reference the link to the attribution
*/
public final void addAttributionLink(String reference){
if(reference != null && !reference.isEmpty()){
wrappedEntity.getMetadata().addReference(NamespaceEnum.cc+"attributionURL", reference);
wrappedEntity.getMetadata().addReference(NamespaceEnum.rdf+"type", NamespaceEnum.cc+"Work");
}
}
/**
* Removes all Attributions form the metadata fo the entity
*/
public final void removeAttributions(){
wrappedEntity.getMetadata().removeAll(NamespaceEnum.cc+"attributionURL");
wrappedEntity.getMetadata().removeAll(NamespaceEnum.cc+"attributionName");
checkForCcWork();
}
/**
* Adds a reference to the license to the metadata of the entity
* @param reference the license
*/
public final void addLicenseUrl(String reference){
if(reference != null && !reference.isEmpty()){
wrappedEntity.getMetadata().addReference(NamespaceEnum.cc+"license", reference);
wrappedEntity.getMetadata().addReference(NamespaceEnum.rdf+"type", NamespaceEnum.cc+"Work");
}
}
// public final void setLicense(String name,String text,String lang){
// if(name != null && text != null){
// //add type, relation to the entity and the license information
// wrappedEntity.getMetadata().addNaturalText("", name, lang);
// } else {
// throw new IllegalArgumentException("Both the license name and the text MUST NOT be NULL!");
// }
// }
/**
* Removes the license from the metadata of the entity
* @param reference the license
*/
public final void removeLicense(String reference){
wrappedEntity.getMetadata().removeReference(NamespaceEnum.cc+"license", reference);
checkForCcWork();
}
/**
* checks if the cc:Work type can be removed
*/
private void checkForCcWork(){
if(wrappedEntity.getMetadata().getFirst(NamespaceEnum.cc+"license")==null &&
wrappedEntity.getMetadata().getFirst(NamespaceEnum.cc+"attributionName")==null &&
wrappedEntity.getMetadata().getFirst(NamespaceEnum.cc+"attributionURL")==null){
wrappedEntity.getMetadata().removeReference(NamespaceEnum.rdf+"type", NamespaceEnum.cc+"Work");
}
}
}