001 /**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.edl.impl.extract.dao.impl;
017
018 import java.util.List;
019
020 import org.kuali.rice.core.api.criteria.QueryByCriteria;
021 import org.kuali.rice.edl.impl.extract.Dump;
022 import org.kuali.rice.edl.impl.extract.Fields;
023 import org.kuali.rice.edl.impl.extract.dao.ExtractDAO;
024 import org.kuali.rice.kew.notes.Note;
025 import org.kuali.rice.krad.data.DataObjectService;
026 import org.kuali.rice.krad.data.PersistenceOption;
027
028 import static org.kuali.rice.core.api.criteria.PredicateFactory.*;
029
030 public class ExtractDAOJpaImpl implements ExtractDAO {
031
032 /** Logger for this class. */
033 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ExtractDAOJpaImpl.class);
034
035 /** Service that persists data to and from the underlying datasource. */
036 private DataObjectService dataObjectService;
037
038 /**
039 * {@inheritDoc}
040 */
041 @Override
042 public Dump getDumpByDocumentId(String docId) {
043 LOG.debug("finding Document Extract by documentId " + docId);
044 return this.dataObjectService.find(Dump.class, docId);
045 }
046
047 /**
048 * {@inheritDoc}
049 */
050 @Override
051 public List<Fields> getFieldsByDocumentId(String docId) {
052 LOG.debug("finding Extract Fileds by documentId " + docId);
053
054 QueryByCriteria.Builder criteria = QueryByCriteria.Builder.create();
055 criteria.setPredicates(equal("documentId", docId)).setOrderByAscending("docId");
056
057 return this.dataObjectService.findMatching(Fields.class, criteria.build()).getResults();
058 }
059
060 /**
061 * {@inheritDoc}
062 */
063 @Override
064 public Dump saveDump(Dump dump) {
065 LOG.debug("check for null values in Extract document");
066 checkNull(dump.getDocId(), "Document ID");
067 checkNull(dump.getDocCreationDate(), "Creation Date");
068 checkNull(dump.getDocCurrentNodeName(), "Current Node Name");
069 checkNull(dump.getDocModificationDate(), "Modification Date");
070 checkNull(dump.getDocRouteStatusCode(), "Route Status Code");
071 checkNull(dump.getDocInitiatorId(), "Initiator ID");
072 checkNull(dump.getDocTypeName(), "Doc Type Name");
073 LOG.debug("saving EDocLite document: routeHeader " + dump.getDocId());
074
075 return this.dataObjectService.save(dump, PersistenceOption.FLUSH);
076 }
077
078 /**
079 * {@inheritDoc}
080 */
081 @Override
082 public Fields saveField(Fields field) {
083 LOG.debug("saving EDocLite Extract fields");
084 checkNull(field.getDocId(), "Document ID");
085 checkNull(field.getFieldValue(), "Field Value");
086 checkNull(field.getFieldName(), "Field Name");
087 LOG.debug("saving Fields: routeHeader " + field.getFieldId());
088
089 return this.dataObjectService.save(field, PersistenceOption.FLUSH);
090 }
091
092 /**
093 * Determines if the given value is null and throws a {@link RuntimeException}
094 * @param value the value to check if null
095 * @param valueName the value name to display in the {@link RuntimeException} message.
096 * @throws RuntimeException if the supplied value is null
097 */
098 private void checkNull(Object value, String valueName) throws RuntimeException {
099 if (value == null) {
100 throw new RuntimeException("Null value for " + valueName);
101 }
102 }
103
104 /**
105 * {@inheritDoc}
106 */
107 @Override
108 public void deleteDump(String documentId) {
109 LOG.debug("deleting record form Extract Dump table");
110 this.dataObjectService.delete(this.dataObjectService.find(Note.class, documentId));
111 }
112
113 /**
114 * Returns the {@link DataObjectService}
115 * @return the {@link DataObjectService}
116 */
117 public DataObjectService getDataObjectService() {
118 return this.dataObjectService;
119 }
120
121 /**
122 *
123 * @see #getDataObjectService()
124 */
125 public void setDataObjectService(DataObjectService dataObjectService) {
126 this.dataObjectService = dataObjectService;
127 }
128 }