libreccm-legacy/ccm-cms/src/com/arsdigita/cms/dispatcher/Resource.java

175 lines
5.1 KiB
Java
Executable File

/*
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.cms.dispatcher;
import com.arsdigita.cms.ContentSection;
import com.arsdigita.db.Sequences;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.DataQuery;
import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.Session;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.UncheckedWrapperException;
import java.math.BigDecimal;
import java.sql.SQLException;
/**
* <p>An instance of a {@link com.arsdigita.cms.dispatcher.ResourceType}.</p>
*
* @author Michael Pih (pihman@arsdigita.com)
* @version $Revision: #9 $ $DateTime: 2004/08/17 23:15:09 $
* @version $Id: Resource.java 287 2005-02-22 00:29:02Z sskracic $
**/
public class Resource extends DomainObject {
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.Resource";
private static final String ID = "id";
private static final String RESOURCE_TYPE = "type";
private static final String CLASSNAME = "className";
public Resource() {
super(BASE_DATA_OBJECT_TYPE);
}
public Resource(String type) {
super(type);
}
public Resource(OID oid) throws DataObjectNotFoundException {
super(oid);
}
public Resource(DataObject obj) {
super(obj);
}
public BigDecimal getID() {
return (BigDecimal) get(ID);
}
public String getClassName() {
return (String) get(CLASSNAME);
}
private void setID(BigDecimal id) {
set(ID, id);
}
public void setClassName(String s) {
set(CLASSNAME, s);
}
public ResourceType getType() {
DataObject type = (DataObject) get(RESOURCE_TYPE);
if ( type == null ) {
return null;
} else {
return new ResourceType(type);
}
}
public void setType(ResourceType t) {
setAssociation(RESOURCE_TYPE, t);
}
/**
* Creates a new resource object. Use this method by calling
* createInstance() from an instance of a ResourceType.
*
* @param type The resource type object
* @param className The Java class that implements this resource
* @return The new resource
*/
protected static Resource create(ResourceType type, String className) {
Resource resource = new Resource();
try {
BigDecimal id = Sequences.getNextValue();
resource.setID(id);
} catch(SQLException e) {
throw new UncheckedWrapperException("Error creating Resource", e);
}
resource.setClassName(className);
resource.setType(type);
return resource;
}
/**
* Creates a new resource object.
*
* @param section The content section
* @param url The URL (relative to the content section) identifying
* the resource
* @return The new resource mapping
*/
public ResourceMapping createInstance(ContentSection section, String url) {
return createInstance(section.getID(), url);
}
/**
* Creates a new resource object.
*
* @param sectionId The content section ID
* @param url The URL (relative to the content section) identifying
* the resource
* @return The new resource mapping
*/
public ResourceMapping createInstance(BigDecimal sectionId, String url) {
ResourceMapping map = new ResourceMapping();
map.setSectionID(sectionId);
map.setUrl(url);
map.setResourceID(getID());
return map;
}
public static Resource findResource(ContentSection section, String url)
throws DataObjectNotFoundException {
Session session = SessionManager.getSession();
DataQuery dq =
session.retrieveQuery("com.arsdigita.cms.getResourceMappings");
Filter f = dq.addFilter("sectionId = :sectionId and url = :url");
f.set("sectionId", section.getID());
f.set("url", url);
Resource resource = null;
BigDecimal id = null;
if ( dq.next() ) {
id = (BigDecimal) dq.get("resourceId");
resource = new Resource
(new OID(Resource.BASE_DATA_OBJECT_TYPE, id));
dq.close();
}
return resource;
}
}