/*
* $Id: ContractBMPBean.java,v 1.24.2.1 2007/01/12 19:32:16 idegaweb Exp $
*
* Copyright (C) 2001 Idega hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*
*/
package com.idega.block.contract.data;
import java.io.StringReader;
import java.sql.Date;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import com.idega.core.file.data.ICFile;
import com.idega.data.IDOAddRelationshipException;
import com.idega.data.IDOException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.IDORelationshipException;
import com.idega.data.IDORemoveRelationshipException;
import com.idega.data.IDOStoreException;
import com.idega.util.IWTimestamp;
import com.idega.xml.XMLDocument;
import com.idega.xml.XMLElement;
import com.idega.xml.XMLException;
import com.idega.xml.XMLParser;
/**
* Title: idegaclasses
* Description:
* Copyright: Copyright (c) 2001
* Company: idega
* @author <a href="aron@idega.is">Aron Birkir</a>
* @version 1.0
*/
public class ContractBMPBean extends com.idega.data.GenericEntity implements com.idega.block.contract.data.Contract {
private static final String name_ = "con_contract";
private static final String category_ = "con_category_id";
private static final String userId_ = "ic_user_id";
private static final String validFrom_ = "valid_from";
private static final String validTo_ = "valid_to";
private static final String status_ = "status";
private static final String created_ = "created";
private static final String statusDate_ = "status_date";
private static final String text_ = "text";
private static final String signedData_ = "signed_data";
private static final String signedFlag_ = "signed_flag";
private static final String signedDate_ = "signed_date";
private static final String signedBy_ = "signed_by";
public static final String statusCreated = "C";
public static final String statusPrinted = "P";
public static final String statusSigned = "S";
public static final String statusRejected = "R";
public static final String statusTerminated = "T";
public static final String statusEnded = "E";
public static final String statusResigned = "U";
public static String getColumnNameStatus() {
return status_;
}
public static String getColumnNameValidTo() {
return validTo_;
}
public static String getColumnNameValidFrom() {
return validFrom_;
}
public static String getColumnNameUserId() {
return userId_;
}
public static String getColumnNameStatusDate() {
return statusDate_;
}
public static String getColumnNameCreationDate() {
return created_;
}
public static String getColumnNameContractEntityName() {
return name_;
}
public static String getColumnNameCategoryId() {
return category_;
}
public static String getColumnNameText() {
return text_;
}
public static String getColumnNameSignedData() {
return signedData_;
}
public static String getColumnNameSignedFlag() {
return signedFlag_;
}
public static String getColumnNameSignedDate() {
return signedDate_;
}
public ContractBMPBean() {
}
public ContractBMPBean(int id) throws SQLException {
super(id);
}
public void initializeAttributes() {
addAttribute(getIDColumnName());
addAttribute(category_, "Category", true, true, java.lang.Integer.class, "many-to-one", com.idega.block.contract.data.ContractCategory.class);
addAttribute(userId_, "Contract maker", true, true, java.lang.Integer.class, "one-to-many", com.idega.core.user.data.User.class);
addAttribute(validFrom_, "Valid from", true, true, java.sql.Date.class);
addAttribute(validTo_, "Valid to", true, true, java.sql.Date.class);
addAttribute(statusDate_, "Status changed", true, true, java.sql.Date.class);
addAttribute(status_, "Status", true, true, java.lang.String.class, 1);
addAttribute(created_, "Created", true, true, java.sql.Date.class);
addAttribute(text_, "Text", true, true, java.lang.String.class, 30000);
addAttribute(signedData_, "XML Signed Data", true, true, java.lang.String.class, 30000);
addAttribute(signedFlag_, "Signed Flag", true, true, java.lang.Boolean.class);
addAttribute(signedDate_, "Signed Date", true, true, java.sql.Date.class);
addAttribute(signedBy_, "Signed By", true, true, java.lang.Integer.class, "one-to-many", com.idega.core.user.data.User.class);
addManyToManyRelationShip(com.idega.core.file.data.ICFile.class);
addMetaDataRelationship();
}
public String getEntityName() {
return (name_);
}
public void setUserId(int id) {
setColumn(userId_, id);
}
public void setUserId(Integer id) {
setColumn(userId_, id);
}
public Integer getUserId() {
return (getIntegerColumnValue(userId_));
}
public void setSignedBy(Integer id) {
setColumn(signedBy_, id);
}
public Integer getSignedBy(Integer id) {
return (getIntegerColumnValue(signedBy_));
}
public void setValidFrom(Date date) {
setColumn(validFrom_, date);
}
public Date getValidFrom() {
return ((Date)getColumnValue(validFrom_));
}
public void setValidTo(Date date) {
setColumn(validTo_, date);
}
public Date getValidTo() {
return ((Date)getColumnValue(validTo_));
}
public void setCreationDate(Date date) {
setColumn(created_, date);
}
public Date getCreationDate() {
return (Date)getColumnValue(created_);
}
public void setStatusDate(Date date) {
setColumn(statusDate_, date);
}
public Date getStatusDate() {
return (Date)getColumnValue(statusDate_);
}
public void setCategoryId(int id) {
setColumn(category_, id);
}
public void setCategoryId(Integer id) {
setColumn(category_, id);
}
public Integer getCategoryId() {
return getIntegerColumnValue(category_);
}
public void setStatus(String status) throws IllegalStateException {
if ((status.equalsIgnoreCase(statusCreated)) || (status.equalsIgnoreCase(statusEnded)) || (status.equalsIgnoreCase(statusRejected)) || (status.equalsIgnoreCase(statusSigned)) || (status.equalsIgnoreCase(statusTerminated)) || (status.equalsIgnoreCase(statusResigned)) || (status.equalsIgnoreCase(statusPrinted))) {
setColumn(status_, status);
setStatusDate(IWTimestamp.RightNow().getSQLDate());
}
else {
throw new IllegalStateException("Undefined state : " + status);
}
}
public String getStatus() {
return ((String)getColumnValue(status_));
}
public void setStatusCreated() {
setStatus(statusCreated);
}
public void setStatusEnded() {
setStatus(statusEnded);
}
public void setStatusRejected() {
setStatus(statusRejected);
}
public void setStatusSigned() {
setStatus(statusSigned);
}
public void setStatusTerminated() {
setStatus(statusTerminated);
}
public void setStatusPrinted() {
setStatus(statusPrinted);
}
public void setStatusResigned() {
setStatus(statusResigned);
}
public void setXmlSignedData(java.lang.String XMLSignedData) {
setColumn(signedData_, XMLSignedData);
}
public void setText(java.lang.String text) {
setColumn(text_, text);
}
public java.lang.String getXmlSignedData() {
return ((String)getColumnValue(signedData_));
}
public java.lang.String getText() {
return ((String)getColumnValue(text_));
}
public java.lang.Boolean getSignedFlag() {
return ((Boolean)getColumnValue(signedFlag_));
}
public void setSignedFlag(java.lang.Boolean p0) {
setColumn(signedFlag_, p0);
}
public boolean isSigned() {
return getSignedFlag() != null && getSignedFlag().booleanValue();
}
public void setSignedDate(java.sql.Date time) {
setColumn(signedDate_, time);
}
public Date getSignedDate() {
return (Date)getColumnValue(signedDate_);
}
/**
* Returns all xml fields in the contract text that have not yet got a value.
*/
public Set getUnsetFields() {
Set fields = new HashSet();
try {
XMLParser parser = new XMLParser();
XMLDocument document = parser.parse(new StringReader("<dummy>" + getText() + "</dummy>"));
XMLElement root = document.getRootElement();
List xmlFields = root.getChildren();
Iterator i = xmlFields.iterator();
while (i.hasNext()) {
fields.add(((XMLElement)i.next()).getName());
}
} catch (XMLException ex) {
ex.printStackTrace();
}
return fields;
}
public static void main(String args[]){
Map map = new HashMap();
map.put("name", "Roar");
System.out.println(ContractBMPBean.setUnsetFields(map, "Enter the name: <name/>. Age: <age/>."));
}
/**
* Gives value to xml-fields in the contract text. The xml field is substituted with the text value.
* If no value is given in the fieldValues parameter, the xml field is left unchanged.
*/
public void setUnsetFields(Map fieldValues) {
String text = setUnsetFields(fieldValues, getText());
setText(text);
store();
}
private static String setUnsetFields(Map fieldValues, String text) {
String retValue = null;
StringBuffer merged = new StringBuffer();
try {
XMLParser parser = new XMLParser();
XMLDocument document = parser.parse(new StringReader("<dummy>" + text + "</dummy>"));
XMLElement root = document.getRootElement();
Iterator it = root.getContent().iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj instanceof XMLElement) {
String name = ((XMLElement)obj).getName();
String value = (String) fieldValues.get(name);
// System.out.println(" (name: " + name + ", value: " + value + ")");
merged.append(value != null ? value : "<" + name + "/>");
} else if (obj instanceof String) {
merged.append((String) obj);
}
}
retValue = merged.toString();
} catch (XMLException ex) {
ex.printStackTrace();
}
return retValue;
}
public Contract ejbHomeCreate(int userID, int iCategoryId, IWTimestamp ValFrom, IWTimestamp ValTo, String sStatus, Map map) {
try {
Contract C = ((ContractHome)IDOLookup.getHome(Contract.class)).create();
C.setStatus(sStatus);
C.setValidFrom(ValFrom.getSQLDate());
if (userID != -1) {
C.setUserId(userID);
}
if (ValTo != null) {
C.setValidTo(ValTo.getSQLDate());
}
C.setCategoryId(iCategoryId);
Iterator it = null;
if (map != null) {
it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry me = (Map.Entry)it.next();
C.setMetaData(me.getKey().toString(), me.getValue().toString());
}
}
C.store();
// ContractWriter.writeText(C.getID(), iCategoryId);
return C;
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (IDOStoreException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
return null;
}
public Contract ejbHomeCreate(int iCategoryId, IWTimestamp ValFrom, IWTimestamp ValTo, String sStatus, Map map) {
return ejbHomeCreate(-1, iCategoryId, ValFrom, ValTo, sStatus, map);
}
public Contract ejbHomeCreate(int userId, int iCategoryId, IWTimestamp ValFrom, IWTimestamp ValTo, String sStatus, String text) {
try {
Contract C = ((ContractHome)IDOLookup.getHome(Contract.class)).create();
C.setStatus(sStatus);
C.setText(text);
C.setValidFrom(ValFrom.getSQLDate());
C.setUserId(userId);
if (ValTo != null) {
C.setValidTo(ValTo.getSQLDate());
}
C.setCategoryId(iCategoryId);
C.store();
// ContractWriter.writeText(C.getID(), iCategoryId);
return C;
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (IDOStoreException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (EJBException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
return null;
}
public Collection ejbFindAllByCategory(int iCategoryID) throws FinderException {
return super.idoFindPKsByQuery(idoQueryGetSelect().appendWhereEquals(ContractBMPBean.getColumnNameCategoryId(), iCategoryID));
}
public Collection ejbFindAllByUser(int userID) throws FinderException {
return super.idoFindPKsByQuery(idoQueryGetSelect().appendWhereEquals(ContractBMPBean.getColumnNameUserId(), userID));
}
public Collection ejbFindAllByCategoryAndStatus(int iCategoryID, String status) throws FinderException {
return super.idoFindPKsByQuery(idoQueryGetSelect().appendWhereEquals(ContractBMPBean.getColumnNameCategoryId(), iCategoryID).appendAndEquals(getColumnNameStatus(), status));
}
public boolean ejbHomeSetStatus(int conID, String status) throws FinderException, IDOLookupException {
Contract C = ((ContractHome)IDOLookup.getHome(Contract.class)).findByPrimaryKey(new Integer(conID));
C.setStatus(status);
C.store();
return true;
}
public int ejbHomeGetCountByCategory(int catID) throws IDOException {
return this.idoGetNumberOfRecords(idoQueryGetSelectCount().appendWhereEquals(getColumnNameCategoryId(), catID));
}
public Collection ejbHomeFindFiles(int contractID) throws FinderException, IDORelationshipException {
return idoGetRelatedEntities(ICFile.class);
}
public void addFileToContract(ICFile file) throws IDOAddRelationshipException {
idoAddTo(file);
}
public void removeFileFromContract(ICFile file) throws IDORemoveRelationshipException{
idoRemoveFrom(file);
}
public void removeAllFiles() throws IDORemoveRelationshipException {
this.idoRemoveFrom(ICFile.class);
}
}