/**
* Copyright 2005-2014 Restlet
*
* The contents of this file are subject to the terms of one of the following
* open source licenses: Apache 2.0 or or EPL 1.0 (the "Licenses"). You can
* select the license that you prefer but you may not use this file except in
* compliance with one of these Licenses.
*
* You can obtain a copy of the Apache 2.0 license at
* http://www.opensource.org/licenses/apache-2.0
*
* You can obtain a copy of the EPL 1.0 license at
* http://www.opensource.org/licenses/eclipse-1.0
*
* See the Licenses for the specific language governing permissions and
* limitations under the Licenses.
*
* Alternatively, you can obtain a royalty free commercial license with less
* limitations, transferable or non-transferable, directly at
* http://restlet.com/products/restlet-framework
*
* Restlet is a registered trademark of Restlet S.A.S.
*/
package org.restlet.ext.atom;
import static org.restlet.ext.atom.Feed.ATOM_NAMESPACE;
import static org.restlet.ext.atom.Service.APP_NAMESPACE;
import java.util.ArrayList;
import java.util.List;
import org.restlet.data.Reference;
import org.restlet.ext.xml.XmlWriter;
import org.xml.sax.SAXException;
/**
* Workspace containing collections of members entries.
*
* @author Jerome Louvel
*/
public class Workspace {
/**
* The base reference used to resolve relative references found within the
* scope of the xml:base attribute.
*/
private volatile Reference baseReference;
/**
* The list of collections.
*/
private volatile List<Collection> collections;
/**
* The parent service.
*/
private volatile Service service;
/**
* The title.
*/
private volatile String title;
/**
* Constructor.
*
* @param service
* The parent service.
*/
public Workspace(Service service) {
this(service, null);
}
/**
* Constructor.
*
* @param service
* The parent service.
* @param title
* The title.
*/
public Workspace(Service service, String title) {
this.service = service;
this.title = title;
}
/**
* Returns the base reference used to resolve relative references found
* within the scope of the xml:base attribute.
*
* @return The base reference used to resolve relative references found
* within the scope of the xml:base attribute.
*/
public Reference getBaseReference() {
return baseReference;
}
/**
* Returns the list of collections.
*
* @return The list of collections.
*/
public List<Collection> getCollections() {
if (this.collections == null) {
this.collections = new ArrayList<Collection>();
}
return this.collections;
}
/**
* Returns the parent service.
*
* @return The parent service.
*/
public Service getService() {
return this.service;
}
/**
* Returns the title.
*
* @return The title.
*/
public String getTitle() {
return this.title;
}
/**
* Sets the base reference used to resolve relative references found within
* the scope of the xml:base attribute.
*
* @param baseReference
* The base reference used to resolve relative references found
* within the scope of the xml:base attribute.
*/
public void setBaseReference(Reference baseReference) {
this.baseReference = baseReference;
}
/**
* Sets the parent service.
*
* @param service
* The parent service.
*/
public void setService(Service service) {
this.service = service;
}
/**
* Sets the title.
*
* @param title
* The title.
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Writes the current object as an XML element using the given SAX writer.
*
* @param writer
* The SAX writer.
* @throws SAXException
*/
public void writeElement(XmlWriter writer) throws SAXException {
writer.startElement(APP_NAMESPACE, "workspace");
if (getTitle() != null) {
writer.dataElement(ATOM_NAMESPACE, "title", getTitle());
}
for (final Collection collection : getCollections()) {
collection.writeElement(writer);
}
writer.endElement(APP_NAMESPACE, "workspace");
}
}