Java tutorial
/* * #%L * BroadleafCommerce Common Libraries * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * Licensed 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. * #L% */ package org.broadleafcommerce.common.config.dao; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.broadleafcommerce.common.cache.AbstractCacheMissAware; import org.broadleafcommerce.common.cache.PersistentRetrieval; import org.broadleafcommerce.common.config.domain.SystemProperty; import org.broadleafcommerce.common.config.domain.SystemPropertyImpl; import org.broadleafcommerce.common.extensibility.jpa.SiteDiscriminator; import org.broadleafcommerce.common.persistence.EntityConfiguration; import org.broadleafcommerce.common.web.BroadleafRequestContext; import org.hibernate.ejb.QueryHints; import org.springframework.stereotype.Repository; import java.util.List; import javax.annotation.Resource; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; /** * This DAO enables access to manage system properties that can be stored in the database. * <p/> * User: Kelly Tisdell * Date: 6/20/12 */ @Repository("blSystemPropertiesDao") public class SystemPropertiesDaoImpl extends AbstractCacheMissAware implements SystemPropertiesDao { protected static final Log LOG = LogFactory.getLog(SystemPropertiesDaoImpl.class); @PersistenceContext(unitName = "blPU") protected EntityManager em; @Resource(name = "blEntityConfiguration") protected EntityConfiguration entityConfiguration; @Override public SystemProperty readById(Long id) { return em.find(SystemPropertyImpl.class, id); } @Override public SystemProperty saveSystemProperty(SystemProperty systemProperty) { return em.merge(systemProperty); } @Override public void deleteSystemProperty(SystemProperty systemProperty) { em.remove(systemProperty); } @Override public List<SystemProperty> readAllSystemProperties() { TypedQuery<SystemProperty> query = em.createNamedQuery("BC_READ_ALL_SYSTEM_PROPERTIES", SystemProperty.class); query.setHint(QueryHints.HINT_CACHEABLE, true); return query.getResultList(); } @Override public SystemProperty readSystemPropertyByName(final String name) { return getCachedObject(SystemProperty.class, "blSystemPropertyNullCheckCache", "SYSTEM_PROPERTY_MISSING_CACHE_HIT_RATE", new PersistentRetrieval<SystemProperty>() { @Override public SystemProperty retrievePersistentObject() { TypedQuery<SystemProperty> query = em.createNamedQuery("BC_READ_SYSTEM_PROPERTIES_BY_NAME", SystemProperty.class); query.setParameter("propertyName", name); query.setHint(QueryHints.HINT_CACHEABLE, true); List<SystemProperty> props = query.getResultList(); if (props != null && !props.isEmpty()) { return props.get(0); } return null; } }, name, getSite()); } @Override public void removeFromCache(SystemProperty systemProperty) { String site = ""; if (systemProperty instanceof SiteDiscriminator && ((SiteDiscriminator) systemProperty).getSiteDiscriminator() != null) { site = String.valueOf(((SiteDiscriminator) systemProperty).getSiteDiscriminator()); } super.removeItemFromCache("blSystemPropertyNullCheckCache", systemProperty.getName(), site); } @Override public SystemProperty createNewSystemProperty() { return (SystemProperty) entityConfiguration.createEntityInstance(SystemProperty.class.getName()); } @Override protected Log getLogger() { return LOG; } protected String getSite() { String site = ""; BroadleafRequestContext brc = BroadleafRequestContext.getBroadleafRequestContext(); if (brc != null) { if (brc.getSite() != null) { site = String.valueOf(brc.getSite().getId()); } } return site; } }