// idega 2001 - Tryggvi Larusson /* * * Copyright 2001 idega.is All Rights Reserved. * */ package com.idega.core.component.data; import java.sql.SQLException; import java.util.Collection; import java.util.Iterator; import javax.ejb.FinderException; import javax.faces.component.UIComponent; import com.idega.core.component.business.ICObjectBusiness; import com.idega.data.IDOException; import com.idega.data.IDOFinderException; import com.idega.data.IDORemoveRelationshipException; import com.idega.data.query.Column; import com.idega.data.query.CountColumn; import com.idega.data.query.MatchCriteria; import com.idega.data.query.SelectQuery; import com.idega.data.query.Table; import com.idega.presentation.PresentationObject; /** * @author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson</a> * @version 1.3 */ public class ICObjectInstanceBMPBean extends com.idega.data.GenericEntity implements ICObjectInstance { private static final long serialVersionUID = -1522439895980168899L; public ICObjectInstanceBMPBean() { super(); } public ICObjectInstanceBMPBean(int id) throws Exception { super(id); } public static final String COLUMN_OBJECT_ID = "IC_OBJECT_ID"; public static final String IBPAGEID = "IB_PAGE_ID"; public static final String COLUMNNAME_PARENTID = "DPT_PARENT_ID"; @Override public void initializeAttributes() { // par1: column name, par2: visible column name, par3-par4: // editable/showable, par5 ... addAttribute(getIDColumnName()); addManyToOneRelationship(COLUMN_OBJECT_ID, "Object", ICObject.class); addManyToOneRelationship(IBPAGEID, "Page", com.idega.core.builder.data.ICPage.class); addManyToOneRelationship(COLUMNNAME_PARENTID, "ParentId", ICObjectInstance.class); addUniqueIDColumn(); addIndex(getUniqueIdColumnName()); getEntityDefinition().setBeanCachingActiveByDefault(true,10000); getEntityDefinition().setUseFinderCollectionPrefetch(true); } @Override public String getEntityName() { return "IC_OBJECT_INSTANCE"; } @Override public void setDefaultValues() { // setColumn("image_id",1); } @Override public String getName() { return getObject().getName() + " nr. " + this.getID(); } @Override public void setICObjectID(int id) { this.setColumn(COLUMN_OBJECT_ID, id); } @Override public void setICObject(ICObject object) { this.setColumn(COLUMN_OBJECT_ID, object); } @Override public int getIBPageID() { return getIntColumnValue(IBPAGEID); } @Override public void setIBPageID(int id) { this.setColumn(IBPAGEID, id); } @Override public int getParentInstanceID() { return getIntColumnValue(COLUMNNAME_PARENTID); } @Override public void setParentInstanceID(int id) { this.setColumn(COLUMNNAME_PARENTID, id); } @Override public ICObject getObject() { int icObjectID = this.getIntColumnValue(COLUMN_OBJECT_ID); if (icObjectID < 0) { return null; } return ICObjectBusiness.getInstance().getICObject(icObjectID); } @Override public PresentationObject getNewInstance() throws ClassNotFoundException, IllegalAccessException, InstantiationException { return getObject().getNewInstance(); } @Override public void setIBPageByKey(String pageKey) { try { int id = Integer.parseInt(pageKey); this.setIBPageID(id); } catch (NumberFormatException e) { System.err.println(e.getMessage()); } } public void ejbHomeRemoveRelation(ICObjectInstance instance, Class relatedEntity) throws IDORemoveRelationshipException { try { instance.removeFrom(relatedEntity); } catch (SQLException e) { throw new IDORemoveRelationshipException(e.getMessage()); } } @Override public String getUniqueId() { return super.getUniqueId(); } @Override public void setUniqueId(String uniqueId) { super.setUniqueId(uniqueId); } @Override public int getID(){ return super.getID(); } public Integer ejbFindByUniqueId(String uuid) throws FinderException { Collection cachedList = getCachedEntities(); for (Iterator iter = cachedList.iterator(); iter.hasNext();) { ICObjectInstance instance = (ICObjectInstance) iter.next(); if(instance != null && instance.getUniqueId() != null && uuid != null && instance.getUniqueId().equals(uuid)){ return (Integer) instance.getPrimaryKey(); } } //if not found in cache try to find in database SelectQuery sql = idoSelectPKQuery(); Table thisTable = new Table(getEntityDefinition().getSQLTableName()); sql.addCriteria(new MatchCriteria(thisTable, getUniqueIdColumnName(), MatchCriteria.EQUALS, uuid)); return (Integer) idoFindOnePKByQuery(sql); } public Collection ejbFindByPageKey(String pageKey) throws FinderException{ try{ int pageId = Integer.parseInt(pageKey); SelectQuery query = idoSelectQuery(); Table thisTable = new Table(getEntityDefinition().getSQLTableName()); query.addCriteria(new MatchCriteria(thisTable, IBPAGEID, MatchCriteria.EQUALS, pageId)); Collection list = idoFindPKsByQuery(query); return list; } catch(NumberFormatException nfe){ throw new IDOFinderException(nfe); } } public int ejbHomeGetCountByICObject(ICObject ico) throws IDOException { Table thisTable = new Table(this); SelectQuery query = new SelectQuery(thisTable); query.addColumn(new CountColumn(getIDColumnName())); query.addCriteria(new MatchCriteria(thisTable, COLUMN_OBJECT_ID, MatchCriteria.EQUALS, ico)); return idoGetNumberOfRecords(query); } public Collection<?> ejbFindByICObject(ICObject ico) throws FinderException { Table thisTable = new Table(this); SelectQuery query = new SelectQuery(thisTable); query.addColumn(new Column(thisTable, getIDColumnName())); query.addCriteria(new MatchCriteria(new Column(thisTable, COLUMN_OBJECT_ID), MatchCriteria.EQUALS, ico)); return idoFindPKsByQuery(query); } public Collection<?> ejbFindByClassName(Class<? extends UIComponent> className) throws FinderException { SelectQuery query = idoSelectQuery(); Table thisTable = new Table(getEntityName()); Table icObjectTable = new Table(ICObject.class); query.addJoin(thisTable, COLUMN_OBJECT_ID, icObjectTable, COLUMN_OBJECT_ID); query.addCriteria(new MatchCriteria(icObjectTable, ICObjectBMPBean.class_name_column_name, MatchCriteria.EQUALS, className.getName())); return idoFindPKsByQuery(query); } }