blob: 0179f1bc5d565eac36dc7d2dc7b9812cfb014809 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. 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. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.abdera2.activities.model;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.apache.abdera2.activities.model.objects.PersonObject;
import org.apache.abdera2.activities.model.objects.ServiceObject;
import org.apache.abdera2.common.anno.Name;
import org.apache.abdera2.common.iri.IRI;
/**
* An Activity. Represents some action that has been taken. At it's core,
* every Activity consists of an Actor (who performed the action), a Verb
* (what action was performed) and an Object (what was acted upon), and a
* Target (to which the action is directed). For instance, if I said
* "John posted a photo to his album", the Actor is "John", the Verb is
* "post", the Object is "a photo" and the Target is "his album".
*/
@SuppressWarnings("unchecked")
@Name("activity")
public class Activity extends ASObject {
private static final long serialVersionUID = -3284781784555866672L;
public static final String ACTOR = "actor";
public static final String CONTENT = "content";
public static final String GENERATOR = "generator";
public static final String ICON = "icon";
public static final String ID = "id";
public static final String OBJECT = "object";
public static final String PUBLISHED = "published";
public static final String PROVIDER = "provider";
public static final String TARGET = "target";
public static final String TITLE = "title";
public static final String UPDATED = "updated";
public static final String URL = "url";
public static final String VERB = "verb";
public enum Audience {
TO, BTO, CC, BCC;
String label() {
return name().toLowerCase();
}
};
public Activity() {}
public Activity(
ASObject actor,
Verb verb) {
setActor(actor);
setVerb(verb);
}
public Activity(
ASObject actor,
Verb verb,
ASObject object) {
setActor(actor);
setVerb(verb);
setObject(object);
}
public Activity(
ASObject actor,
Verb verb,
ASObject object,
ASObject target) {
setActor(actor);
setVerb(verb);
setObject(object);
setTarget(target);
}
public ASObject getActor() {
return getProperty(ACTOR);
}
public <E extends ASObject>E getActor(boolean create) {
ASObject obj = getActor();
if (obj == null && create) {
obj = new PersonObject();
setActor(obj);
}
return (E)obj;
}
public void setActor(ASObject actor) {
setProperty(ACTOR, actor);
}
public <E extends ASObject>E setActor(String displayName) {
ASObject obj = getActor(true);
obj.setDisplayName(displayName);
return (E)obj;
}
public String getContent() {
return getProperty(CONTENT);
}
public void setContent(String content) {
setProperty(CONTENT, content);
}
public <E extends ASObject>E getGenerator() {
return (E)getProperty(GENERATOR);
}
public <E extends ASObject>E getGenerator(boolean create) {
ASObject obj = getGenerator();
if (obj == null && create) {
obj = new ServiceObject();
setGenerator(obj);
}
return (E)obj;
}
public void setGenerator(ASObject generator) {
setProperty(GENERATOR, generator);
}
public <E extends ASObject>E setGenerator(String displayName) {
ASObject obj = getGenerator(true);
obj.setDisplayName(displayName);
return (E)obj;
}
public MediaLink getIcon() {
return getProperty(ICON);
}
public void setIcon(MediaLink icon) {
setProperty(ICON, icon);
}
public String getId() {
return getProperty(ID);
}
public void setId(String id) {
setProperty(ID, id);
}
public <E extends ASObject>E getObject() {
return (E)getProperty(OBJECT);
}
public void setObject(ASObject object) {
setProperty(OBJECT, object);
}
public Date getPublished() {
return getProperty(PUBLISHED);
}
public void setPublished(Date published) {
setProperty(PUBLISHED, published);
}
public <E extends ASObject>E getProvider() {
return (E)getProperty(PROVIDER);
}
public <E extends ASObject>E getProvider(boolean create) {
ASObject obj = getProvider();
if (obj == null && create) {
obj = new ServiceObject();
setProvider(obj);
}
return (E)obj;
}
public void setProvider(ASObject provider) {
setProperty(PROVIDER, provider);
}
public <E extends ASObject>E setProvider(String displayName) {
ASObject obj = getProvider(true);
obj.setDisplayName(displayName);
return (E)obj;
}
public <E extends ASObject>E getTarget() {
return (E)getProperty(TARGET);
}
public void setTarget(ASObject target) {
setProperty(TARGET, target);
}
public String getTitle() {
return getProperty(TITLE);
}
public void setTitle(String title) {
setProperty(TITLE, title);
}
public Date getUpdated() {
return getProperty(UPDATED);
}
public void setUpdated(Date updated) {
setProperty(UPDATED, updated);
}
public IRI getUrl() {
return getProperty(URL);
}
public void setUrl(IRI url) {
setProperty(URL, url);
}
public Verb getVerb() {
return getProperty(VERB);
}
public void setVerb(Verb verb) {
setProperty(VERB, verb);
}
@Override
public <E extends ASObject>E getAuthor() {
return (E)getActor();
}
public <E extends ASObject>E getAuthor(boolean create) {
return (E)getActor(create);
}
@Override
public void setAuthor(ASObject author) {
setActor(author);
}
public <E extends ASObject>E setAuthor(String displayName) {
return (E)setActor(displayName);
}
@Override
public String getDisplayName() {
return getTitle();
}
@Override
public void setDisplayName(String displayName) {
setTitle(displayName);
}
@Override
public MediaLink getImage() {
return getIcon();
}
@Override
public void setImage(MediaLink image) {
setIcon(image);
}
public Iterable<ASObject> getAudience(Audience audience) {
return getProperty(audience.label());
}
public void setAudience(Audience audience, Set<ASObject> set) {
setProperty(audience.label(), set);
}
public void addAudience(Audience audience, ASObject... objs) {
Set<ASObject> list = getProperty(audience.label());
if (list == null) {
list = new HashSet<ASObject>();
setProperty(audience.label(),list);
}
for (ASObject obj : objs)
list.add(obj);
}
}