001    /*
002     * JBoss DNA (http://www.jboss.org/dna)
003     * See the COPYRIGHT.txt file distributed with this work for information
004     * regarding copyright ownership.  Some portions may be licensed
005     * to Red Hat, Inc. under one or more contributor license agreements.
006     * See the AUTHORS.txt file in the distribution for a full listing of 
007     * individual contributors. 
008     *
009     * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
010     * is licensed to you under the terms of the GNU Lesser General Public License as
011     * published by the Free Software Foundation; either version 2.1 of
012     * the License, or (at your option) any later version.
013     *
014     * JBoss DNA is distributed in the hope that it will be useful,
015     * but WITHOUT ANY WARRANTY; without even the implied warranty of
016     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017     * Lesser General Public License for more details.
018     *
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this software; if not, write to the Free
021     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
022     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
023     */
024    package org.jboss.dna.connector.store.jpa.util;
025    
026    import java.util.UUID;
027    import javax.persistence.EntityManager;
028    import org.jboss.dna.common.util.CheckArg;
029    import org.jboss.dna.connector.store.jpa.Model;
030    
031    /**
032     * @author Randall Hauch
033     */
034    public class StoreOptions {
035    
036        public static final String ROOT_NODE_UUID = "org.jboss.dna.store.rootNodeUuid";
037        public static final String VERSION = "org.jboss.dna.store.version";
038        public static final String MODEL = "org.jboss.dna.store.model";
039    
040        private final EntityManager entityManager;
041    
042        public StoreOptions( EntityManager manager ) {
043            CheckArg.isNotNull(manager, "manager");
044            this.entityManager = manager;
045        }
046    
047        public UUID getRootNodeUuid() {
048            String value = getOption(ROOT_NODE_UUID);
049            return value != null ? UUID.fromString(value) : null;
050        }
051    
052        public void setRootNodeUuid( UUID uuid ) {
053            CheckArg.isNotNull(uuid, "uuid");
054            setOption(ROOT_NODE_UUID, uuid.toString());
055        }
056    
057        public String getVersion() {
058            return getOption(VERSION);
059        }
060    
061        public void setVersion( String version ) {
062            setOption(VERSION, version);
063        }
064    
065        public String getModelName() {
066            return getOption(MODEL);
067        }
068    
069        public void setModelName( Model model ) {
070            String modelName = model != null ? model.getName() : null;
071            setOption(MODEL, modelName);
072        }
073    
074        public String getOption( String name ) {
075            StoreOptionEntity entity = entityManager.find(StoreOptionEntity.class, name);
076            return entity != null ? entity.getValue() : null;
077        }
078    
079        public void setOption( String name,
080                               String value ) {
081            CheckArg.isNotEmpty(name, "name");
082            if (value != null) value = value.trim();
083            StoreOptionEntity entity = entityManager.find(StoreOptionEntity.class, name);
084            if (entity == null) {
085                if (value != null) {
086                    // There is no existing entity, but there is a valid value ...
087                    entity = new StoreOptionEntity(name, value);
088                    entityManager.persist(entity);
089                }
090            } else {
091                if (value != null) {
092                    // Set value on the entity ...
093                    entity.setValue(value);
094                } else {
095                    // The existing entity is to be removed ...
096                    entityManager.remove(entity);
097                }
098            }
099        }
100    
101        public void removeOption( String name ) {
102            StoreOptionEntity entity = new StoreOptionEntity(name);
103            entityManager.remove(entity);
104        }
105    }