/**
* Copyright (c) 2009 Juwi MacMillan Group GmbH
*
* 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.
*/
// license-header java merge-point
/**
* This is only generated once! It will never be overwritten.
* You can (and have to!) safely modify it by hand.
*/
package de.juwimm.cms.model;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.tizzit.util.Base64;
import org.tizzit.util.DateConverter;
import org.tizzit.util.XercesHelper;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import de.juwimm.cms.remote.helper.AuthenticationHelper;
import de.juwimm.cms.vo.ContentVersionValue;
/**
* @see de.juwimm.cms.model.ContentVersionHbm
* @author <a href="mailto:carsten.schalm@juwimm.com">Carsten Schalm</a> ,
* Juwi|MacMillan Group Gmbh, Walsrode, Germany
* @version $Id$
*/
public class ContentVersionHbmDaoImpl extends ContentVersionHbmDaoBase {
private static Log log = LogFactory.getLog(ContentVersionHbmDaoImpl.class);
@Autowired
private SequenceHbmDao sequenceHbmDao;
@Override
public ContentVersionHbm create(ContentVersionHbm contentVersionHbm) {
if (contentVersionHbm.getContentVersionId() == null || contentVersionHbm.getContentVersionId().intValue() == 0) {
try {
Integer id = sequenceHbmDao.getNextSequenceNumber("contentversion.content_version_id");
contentVersionHbm.setContentVersionId(id);
} catch (Exception e) {
log.error("Error creating primary key", e);
}
}
if (contentVersionHbm.getVersion() == null) {
contentVersionHbm.setVersion("1");
}
contentVersionHbm.setCreateDate(System.currentTimeMillis());
contentVersionHbm.setCreator(AuthenticationHelper.getUserName());
return super.create(contentVersionHbm);
}
/**
* @see de.juwimm.cms.model.ContentVersionHbm#toXml(int)
*/
@Override
public String handleToXml(ContentVersionHbm contentVersion) {
StringBuilder sb = new StringBuilder();
sb.append("<contentVersion id=\"");
sb.append(contentVersion.getContentVersionId());
sb.append("\">\n");
sb.append("<heading><![CDATA[").append(contentVersion.getHeading()).append("]]></heading>\n");
sb.append("<creator><userName>").append(contentVersion.getCreator()).append("</userName>").append("</creator>\n");
sb.append("<createDate>").append(DateConverter.getSql2String(new Date(contentVersion.getCreateDate()))).append("</createDate>\n");
/* KICK the XML Banner out */
String xmlbanner = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
String txt = contentVersion.getText();
if (txt != null) {
txt = txt.trim();
} else {
txt = ""; //$NON-NLS-1$
}
if (txt.length() >= xmlbanner.length() && txt.substring(0, xmlbanner.length()).equals(xmlbanner)) {
txt = txt.substring(xmlbanner.length());
}
txt = Base64.encodeString(txt, false);
sb.append("<text>").append(txt).append("</text>\n");
sb.append("<version>").append(contentVersion.getVersion()).append("</version>\n");
sb.append("</contentVersion>\n");
return sb.toString();
}
/**
* @see de.juwimm.cms.model.ContentVersionHbm#getDao()
*/
@Override
public ContentVersionValue handleGetDao(ContentVersionHbm contentVersion) {
ContentVersionValue dao = new ContentVersionValue();
dao.setContentVersionId(contentVersion.getContentVersionId());
dao.setHeading(contentVersion.getHeading());
dao.setCreateDate(contentVersion.getCreateDate());
dao.setCreator(contentVersion.getCreator());
dao.setText(contentVersion.getText());
dao.setVersion(contentVersion.getVersion());
return dao;
}
@Override
protected ContentVersionHbm handleCreateFromXml(Element cvnde, boolean reusePrimaryKey, boolean liveDeploy) throws Exception {
ContentVersionHbm contentVersion = ContentVersionHbm.Factory.newInstance();
if (reusePrimaryKey) {
Integer id = new Integer(cvnde.getAttribute("id"));
if (log.isDebugEnabled()) log.debug("creating ContentVersion with existing id " + id);
contentVersion.setContentVersionId(id);
}
contentVersion.setCreateDate(DateConverter.getString2Sql(XercesHelper.getNodeValue(cvnde, "./createDate")).getTime());
contentVersion.setHeading(XercesHelper.getNodeValue(cvnde, "./heading"));
contentVersion.setVersion(XercesHelper.getNodeValue(cvnde, "./version"));
contentVersion.setCreator(XercesHelper.getNodeValue(cvnde, "./creator/userName"));
String ttext = null;
try {
Node ttextnode = XercesHelper.findNode(cvnde, "./text");
ttext = XercesHelper.nodeList2string(ttextnode.getChildNodes());
if (ttext != null) ttext = Base64.decodeToString(ttext);
} catch (Exception e) {
}
if (ttext == null || ttext.equals("<text/>")) {
ttext = "";
}
contentVersion.setText(ttext);
contentVersion = create(contentVersion);
return contentVersion;
}
protected Collection handleFindContentVersionsByViewComponent(Integer viewComponentId) throws Exception {
Query query = getSession().createQuery("select content.contentVersions from de.juwimm.cms.model.ContentHbm content" + " ,de.juwimm.cms.model.ViewComponentHbm viewComponent" + " where content.contentId = viewComponent.reference and viewComponent.viewComponentId = :viewComponentId");
query.setParameter("viewComponentId", viewComponentId);
return query.list();
}
@Override
protected ContentVersionHbm handleCreateFromXmlWIthMedia(Element cvnde, boolean reusePrimaryKey, boolean liveServer, Map pictureIds, Map documentIds, Map personsIds, Integer newUnitId) throws Exception {
ContentVersionHbm contentVersion = ContentVersionHbm.Factory.newInstance();
if (reusePrimaryKey) {
Integer id = new Integer(cvnde.getAttribute("id"));
if (log.isDebugEnabled()) log.debug("creating ContentVersion with existing id " + id);
contentVersion.setContentVersionId(id);
} else {
Integer id = sequenceHbmDao.getNextSequenceNumber("contentversion.content_version_id");
contentVersion.setContentVersionId(id);
}
contentVersion.setCreateDate(DateConverter.getString2Sql(XercesHelper.getNodeValue(cvnde, "./createDate")).getTime());
contentVersion.setHeading(XercesHelper.getNodeValue(cvnde, "./heading"));
contentVersion.setVersion(XercesHelper.getNodeValue(cvnde, "./version"));
contentVersion.setCreator(XercesHelper.getNodeValue(cvnde, "./creator/userName"));
String ttext = null;
try {
Node ttextnode = XercesHelper.findNode(cvnde, "./text");
ttext = XercesHelper.nodeList2string(ttextnode.getChildNodes());
if (ttext != null) {
ttext = Base64.decodeToString(ttext);
Document content = XercesHelper.string2Dom(ttext);
Iterator cvIt = XercesHelper.findNodes(content, "//picture");
while (cvIt.hasNext()) {
Element el = (Element) cvIt.next();
Integer oldId = new Integer(el.getAttribute("description"));
Integer newId = (Integer) pictureIds.get(oldId);
el.setAttribute("description", newId.toString());
}
Iterator imgIt = XercesHelper.findNodes(content, "//image");
while (imgIt.hasNext()) {
Element el = (Element) imgIt.next();
Integer oldId = new Integer(el.getAttribute("src"));
Integer newId = (Integer) pictureIds.get(oldId);
el.setAttribute("src", newId.toString());
}
Iterator docIt = XercesHelper.findNodes(content, "//document");
while (docIt.hasNext()) {
Element el = (Element) docIt.next();
Integer oldId = new Integer(el.getAttribute("src"));
Integer newId = (Integer) documentIds.get(oldId);
el.setAttribute("src", newId.toString());
}
Iterator docAggregation = XercesHelper.findNodes(content, "//aggregation");
if (personsIds != null) {
while (docAggregation.hasNext()) {
Element elAggregation = (Element) docAggregation.next();
Iterator itInclude = XercesHelper.findNodes(elAggregation, "./include");
while (itInclude.hasNext()) {
Node nodeInclude = (Node) itInclude.next();
String type = nodeInclude.getAttributes().getNamedItem("type").getNodeValue();
if (type.equals("unit")) {
if (newUnitId != null) {
nodeInclude.getAttributes().getNamedItem("id").setNodeValue(newUnitId.toString());
}
}
Iterator itIncludePerson = XercesHelper.findNodes(nodeInclude, "./include");
while (itIncludePerson.hasNext()) {
Node nodePerson = (Node) itIncludePerson.next();
String typePerson = nodePerson.getAttributes().getNamedItem("type").getNodeValue();
if (typePerson.equals("person")) {
Long personId = Long.parseLong(nodePerson.getAttributes().getNamedItem("id").getNodeValue());
if (personsIds != null) {
Long newId = (Long) personsIds.get(personId);
nodePerson.getAttributes().getNamedItem("id").setNodeValue(newId.toString());
}
}
}
}
}
}
ttext = XercesHelper.doc2String(content);
}
} catch (Exception e) {
}
if (ttext == null || ttext.equals("<text/>")) {
ttext = "";
}
contentVersion.setText(ttext);
contentVersion = create(contentVersion);
return contentVersion;
}
@Override
protected ContentVersionHbm handleCloneContentVersion(ContentVersionHbm oldContentVersion, Map picturesIds, Map documentsIds, Map personsIds, Integer unitId) throws Exception {
ContentVersionHbm contentVersionHbm = ContentVersionHbm.Factory.newInstance();;
try {
Integer id = sequenceHbmDao.getNextSequenceNumber("contentversion.content_version_id");
contentVersionHbm.setContentVersionId(id);
} catch (Exception e) {
log.error("Error creating primary key for contentVersion", e);
}
/**replace pictures and documents only if not null*/
if ((picturesIds != null) || (documentsIds != null)) {
String text = oldContentVersion.getText();
Document content = XercesHelper.string2Dom(text);
if (picturesIds != null) {
Iterator cvIt = XercesHelper.findNodes(content, "//picture");
while (cvIt.hasNext()) {
Element el = (Element) cvIt.next();
Integer oldId = new Integer(el.getAttribute("description"));
Integer newId = (Integer) picturesIds.get(oldId);
el.setAttribute("description", newId.toString());
}
Iterator imgIt = XercesHelper.findNodes(content, "//image");
while (imgIt.hasNext()) {
Element el = (Element) imgIt.next();
Integer oldId = new Integer(el.getAttribute("src"));
Integer newId = (Integer) picturesIds.get(oldId);
el.setAttribute("src", newId.toString());
}
}
if (documentsIds != null) {
Iterator docIt = XercesHelper.findNodes(content, "//document");
while (docIt.hasNext()) {
Element el = (Element) docIt.next();
Integer oldId = new Integer(el.getAttribute("src"));
Integer newId = (Integer) documentsIds.get(oldId);
el.setAttribute("src", newId.toString());
}
}
Iterator docAggregation = XercesHelper.findNodes(content, "//aggregation");
if (personsIds != null) {
while (docAggregation.hasNext()) {
Element elAggregation = (Element) docAggregation.next();
Iterator itInclude = XercesHelper.findNodes(elAggregation, "./include");
while (itInclude.hasNext()) {
Node nodeInclude = (Node) itInclude.next();
String type = nodeInclude.getAttributes().getNamedItem("type").getNodeValue();
if (type.equals("unit")) {
if (unitId != null) {
nodeInclude.getAttributes().getNamedItem("id").setNodeValue(unitId.toString());
}
}
Iterator itIncludePerson = XercesHelper.findNodes(nodeInclude, "./include");
while (itIncludePerson.hasNext()) {
Node nodePerson = (Node) itIncludePerson.next();
String typePerson = nodePerson.getAttributes().getNamedItem("type").getNodeValue();
if (typePerson.equals("person")) {
Long personId = Long.parseLong(nodePerson.getAttributes().getNamedItem("id").getNodeValue());
if (personsIds != null) {
Long newId = (Long) personsIds.get(personId);
nodePerson.getAttributes().getNamedItem("id").setNodeValue(newId.toString());
}
}
}
}
}
}
text = XercesHelper.doc2String(content);
contentVersionHbm.setText(text);
} else {
contentVersionHbm.setText(oldContentVersion.getText());
}
contentVersionHbm.setVersion("1");
contentVersionHbm.setHeading(oldContentVersion.getHeading());
contentVersionHbm.setCreateDate(System.currentTimeMillis());
contentVersionHbm.setCreator(AuthenticationHelper.getUserName());
return super.create(contentVersionHbm);
}
}