001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Kernel/Sources/es/udc/mypersonalizer/kernel/model/repository/sql/plain/PlainWorkspaceDefinitionAccessor.java,v 1.1.1.1 2004/03/25 12:08:36 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:36 $
005: *
006: * =============================================================================
007: *
008: * Copyright (c) 2003, The MyPersonalizer Development Group
009: * (http://www.tic.udc.es/~fbellas/mypersonalizer/index.html) at
010: * University Of A Coruna
011: * All rights reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions are met:
015: *
016: * - Redistributions of source code must retain the above copyright notice,
017: * this list of conditions and the following disclaimer.
018: *
019: * - Redistributions in binary form must reproduce the above copyright notice,
020: * this list of conditions and the following disclaimer in the documentation
021: * and/or other materials provided with the distribution.
022: *
023: * - Neither the name of the University Of A Coruna nor the names of its
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
028: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
029: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
030: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
031: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
032: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
033: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
034: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
035: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
036: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
037: * POSSIBILITY OF SUCH DAMAGE.
038: *
039: */
040:
041: package es.udc.mypersonalizer.kernel.model.repository.sql.plain;
042:
043: import java.util.Iterator;
044: import java.util.Collection;
045: import java.util.ArrayList;
046:
047: import es.udc.mypersonalizer.kernel.model.repository.interfaces.WorkspaceDefinitionAccessor;
048: import es.udc.mypersonalizer.kernel.model.repository.interfaces.WorkspaceDefinition;
049: import es.udc.mypersonalizer.kernel.model.repository.sql.storers.SerializableObject;
050: import es.udc.mypersonalizer.kernel.model.repository.sql.plain.PlainSerializableObjectAccessor;
051: import es.udc.mypersonalizer.kernel.util.exceptions.InstanceNotFoundException;
052: import es.udc.mypersonalizer.kernel.util.exceptions.DuplicateInstanceException;
053: import es.udc.mypersonalizer.kernel.util.exceptions.InternalErrorException;
054:
055: /**
056: * This class provides a Plain-based implementation of
057: * <code>WorkspaceDefinitionAccessor</code>. The implementation relies on
058: * <code>PlainSerializableObjectAccessor</code> that implements the logic to access
059: * workspace definitions stored as serialized objects in database.
060: *
061: * @author Abel Iago Toral Quiroga
062: * @author Fernando Bellas
063: * @author Abel Muinho
064: * @since 1.0
065: */
066: public class PlainWorkspaceDefinitionAccessor implements
067: WorkspaceDefinitionAccessor {
068:
069: private PlainSerializableObjectAccessor accessor;
070:
071: public PlainWorkspaceDefinitionAccessor() {
072: accessor = new PlainSerializableObjectAccessor();
073: }
074:
075: public WorkspaceDefinition findWorkspaceDefinition(
076: String workspaceType) throws InstanceNotFoundException,
077: InternalErrorException {
078:
079: String realIdentifier = applyNamingConventionsToIdentifier(workspaceType);
080:
081: SerializableObject serializableObject = accessor
082: .findSerializableObject(realIdentifier);
083:
084: return ((WorkspaceDefinition) serializableObject
085: .getSerializable());
086: }
087:
088: public void updateWorkspaceDefinition(
089: WorkspaceDefinition workspaceDefinition)
090: throws InstanceNotFoundException, InternalErrorException {
091:
092: String realIdentifier = applyNamingConventionsToIdentifier(workspaceDefinition
093: .getWorkspaceType());
094:
095: SerializableObject serializableObject = new SerializableObject(
096: realIdentifier, workspaceDefinition);
097:
098: accessor.updateSerializableObject(serializableObject);
099: }
100:
101: public void removeWorkspaceDefinition(String workspaceType)
102: throws InstanceNotFoundException, InternalErrorException {
103:
104: String realIdentifier = applyNamingConventionsToIdentifier(workspaceType);
105:
106: accessor.removeSerializableObject(realIdentifier);
107: }
108:
109: public void addWorkspaceDefinition(
110: WorkspaceDefinition workspaceDefinition)
111: throws DuplicateInstanceException, InternalErrorException {
112:
113: String realIdentifier = applyNamingConventionsToIdentifier(workspaceDefinition
114: .getWorkspaceType());
115:
116: SerializableObject serializableObject = new SerializableObject(
117: realIdentifier, workspaceDefinition);
118:
119: accessor.addSerializableObject(serializableObject);
120: }
121:
122: public Collection findAllWorkspaceDefinitions()
123: throws InternalErrorException {
124:
125: Iterator serializableObjectsIterator = accessor
126: .findSerializableObjectsByPattern(
127: "%"
128: + PlainSerializableObjectAccessor.WORKSPACE_DEFINITION_SUFFIX)
129: .iterator();
130:
131: Collection allWorkspaceDefinitions = new ArrayList();
132: while (serializableObjectsIterator.hasNext()) {
133:
134: SerializableObject serializableObject = (SerializableObject) serializableObjectsIterator
135: .next();
136:
137: WorkspaceDefinition workspaceDefinition = (WorkspaceDefinition) serializableObject
138: .getSerializable();
139: allWorkspaceDefinitions.add(workspaceDefinition);
140: }
141:
142: return allWorkspaceDefinitions;
143: }
144:
145: /**
146: * Aplies naming conventions to a workspace type to match its
147: * serialized object in the database.
148: * @param workspaceType The normal workspace type. (without specific
149: * prefixes or sufixes).
150: * @return The workspece type with the specific suffix of serialized
151: * workspace definitions objects.
152: */
153: private String applyNamingConventionsToIdentifier(
154: String workspaceType) {
155: return (workspaceType + PlainSerializableObjectAccessor.WORKSPACE_DEFINITION_SUFFIX);
156: }
157: }
|