//idega 2001 - Tryggvi Larusson
/*
*Copyright 2001 idega.is All Rights Reserved.
*/
package com.idega.core.component.data;
//import java.util.*;
import java.sql.SQLException;
import java.text.Collator;
import java.util.Collection;
import java.util.List;
import java.util.Vector;
import javax.ejb.FinderException;
import com.idega.core.file.data.ICFile;
import com.idega.data.EntityFinder;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.query.MatchCriteria;
import com.idega.data.query.SelectQuery;
import com.idega.data.query.Table;
import com.idega.data.query.WildCardColumn;
import com.idega.exception.IWBundleDoesNotExist;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWMainApplication;
import com.idega.presentation.PresentationObject;
import com.idega.repository.data.RefactorClassRegistry;
/**
*@author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson</a>
*@version 1.3
*/
public class ICObjectBMPBean extends com.idega.data.GenericEntity implements ICObject {
public static final String COMPONENT_TYPE_ELEMENT = "iw.element";
public static final String COMPONENT_TYPE_BLOCK = "iw.block";
public static final String COMPONENT_TYPE_APPLICATION = "iw.application";
public static final String COMPONENT_TYPE_APPLICATION_COMPONENT = "iw.application.component";
public static final String COMPONENT_TYPE_DATA = "iw.data";
public static final String COMPONENT_TYPE_HOME = "iw.home";
public static final String COMPONENT_TYPE_PROPERTYHANDLER = "iw.propertyhandler";
public static final String COMPONENT_TYPE_INPUTHANDLER = "iw.inputhandler";
public static final String COMPONENT_TYPE_SEARCH_PLUGIN = "iw.searchplugin";
private static final String object_type_column_name = "OBJECT_TYPE";
private static final String class_name_column_name = "CLASS_NAME";
private final static String BUNDLE_COLUMN_NAME = "BUNDLE";
private final static String class_value_column_name = "CLASS_VALUE";
private final static String icon_file = "ICON_FILE";
private static final String COLUMN_OBJECT_NAME = "OBJECT_NAME";
public ICObjectBMPBean()
{
super();
}
public ICObjectBMPBean(int id) throws SQLException
{
super(id);
}
public void initializeAttributes()
{
//par1: column name, par2: visible column name, par3-par4: editable/showable, par5 ...
addAttribute(getIDColumnName());
addAttribute(getColumnObjectName(), "Name", true, true, java.lang.String.class);
addAttribute(getClassNameColumnName(), "Class Name", true, true, java.lang.String.class);
addAttribute(getObjectTypeColumnName(), "Class Name", true, true, java.lang.String.class, "one-to-many", ICObjectType.class);
addAttribute(getBundleColumnName(), "Bundle", true, true, java.lang.String.class, 1000);
addManyToOneRelationship(getColumnClassValue(), "Class File", ICFile.class);
addManyToOneRelationship(getColumnIcon(), "Icon", ICFile.class);
//addAttribute("settings_url","Sl?? stillingas??u",true,true,"java.lang.String");
//addAttribute("class_value","Klasi sj?lfur",true,true,"java.sql.Blob");
//addAttribute("small_icon_image_id","Icon 16x16 (.gif)",false,false,"java.lang.Integer","many-to-one","com.idega.data.genericentity.Image");
//addAttribute("small_icon_image_id","Icon 16x16 (.gif)",false,false,java.lang.Integer.class);
//addAttribute("image_id","MyndN?mer",false,false,"java.lang.Integer","one-to-many","com.idega.projects.golf.entity.ImageEntity");
getEntityDefinition().setBeanCachingActiveByDefault(true);
}
private String getColumnObjectName() {
return COLUMN_OBJECT_NAME;
}
public static String getObjectTypeColumnName()
{
return object_type_column_name;
}
public static String getClassNameColumnName()
{
return class_name_column_name;
}
public static String getColumnClassValue()
{
return class_value_column_name;
}
public static String getColumnIcon()
{
return icon_file;
}
private static List componentList;
public static List getAvailableComponentTypes()
{
try
{
ICObjectTypeHome gtHome = (ICObjectTypeHome) IDOLookup.getHome(ICObjectType.class);
List list = new Vector(gtHome.findAll());
return list;
}
catch (IDOLookupException e)
{
e.printStackTrace();
}
catch (FinderException e1)
{
e1.printStackTrace();
}
return getAvailableComponentTypesOld();
}
private static List getAvailableComponentTypesOld()
{
if (componentList == null)
{
componentList = new Vector();
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_ELEMENT);
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_BLOCK);
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_APPLICATION);
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_APPLICATION_COMPONENT);
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_DATA);
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_HOME);
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_PROPERTYHANDLER);
componentList.add(com.idega.core.component.data.ICObjectBMPBean.COMPONENT_TYPE_SEARCH_PLUGIN);
}
return componentList;
}
public static ICObject getICObject(String className)
{
try
{
List l = EntityFinder.findAllByColumn(getStaticInstance(ICObject.class), getClassNameColumnName(), className);
return (ICObject) l.get(0);
}
catch (Exception e)
{
return null;
}
}
public static void removeICObject(String className)
{
try
{
ICObject instance = (ICObject) com.idega.data.GenericEntity.getStaticInstance(ICObject.class);
instance.deleteMultiple(getClassNameColumnName(), className);
}
catch (Exception e)
{
}
}
public void insertStartData() throws Exception
{
/*ICObject obj = ((com.idega.core.data.ICObjectHome)com.idega.data.IDOLookup.getHomeLegacy(ICObject.class)).createLegacy();
obj.setName("Table");
obj.setObjectClass(Table.class);
obj.setObjectType("iw.element");
obj.insert();
obj = ((com.idega.core.data.ICObjectHome)com.idega.data.IDOLookup.getHomeLegacy(ICObject.class)).createLegacy();
obj.setName("Image");
obj.setObjectClass(com.idega.presentation.Image.class);
obj.setObjectType("iw.element");
obj.insert();
obj = ((com.idega.core.data.ICObjectHome)com.idega.data.IDOLookup.getHomeLegacy(ICObject.class)).createLegacy();
obj.setName("NewsModule");
obj.setObjectClass(NewsReader.class);
obj.setObjectType("iw.block");
obj.insert();
obj = ((com.idega.core.data.ICObjectHome)com.idega.data.IDOLookup.getHomeLegacy(ICObject.class)).createLegacy();
obj.setName("TextModule");
obj.setObjectClass(TextReader.class);
obj.setObjectType("iw.block");
obj.insert();
obj = ((com.idega.core.data.ICObjectHome)com.idega.data.IDOLookup.getHomeLegacy(ICObject.class)).createLegacy();
obj.setName("LoginModule");
obj.setObjectClass(Login.class);
obj.setObjectType("iw.block");
obj.insert();*/
}
public String getEntityName()
{
return "IC_OBJECT";
}
public void setDefaultValues()
{
//setColumn("image_id",1);
//setColumn("small_icon_image_id",1);
//setObjectType("iw.block");
}
public String getName()
{
return getStringColumnValue(getColumnObjectName());
}
public void setName(String object_name)
{
setColumn(getColumnObjectName(), object_name);
}
public String getClassName()
{
return getStringColumnValue(getClassNameColumnName());
}
public void setClassName(String className)
{
setColumn(getClassNameColumnName(), className);
}
public Class getObjectClass() throws ClassNotFoundException
{
String className = getClassName();
if (className != null)
{
return RefactorClassRegistry.forName(className);
}
else
{
//throw new ClassNotFoundException("Class NULL not found");
return null;
}
}
public void setObjectClass(Class c)
{
setClassName(c.getName());
}
public PresentationObject getNewInstance() throws ClassNotFoundException, IllegalAccessException, InstantiationException
{
return (PresentationObject) getObjectClass().newInstance();
}
public String getObjectType()
{
return getStringColumnValue(getObjectTypeColumnName());
}
public void setObjectType(String objectType)
{
setColumn(getObjectTypeColumnName(), objectType);
}
public String getBundleIdentifier()
{
return getStringColumnValue(getBundleColumnName());
}
public void setBundleIdentifier(String bundleIdentifier)
{
setColumn(getBundleColumnName(), bundleIdentifier);
}
public void setBundle(IWBundle bundle)
{
setBundleIdentifier(bundle.getBundleIdentifier());
}
public IWBundle getBundle(IWMainApplication iwma)throws IWBundleDoesNotExist
{
return iwma.getBundle(getBundleIdentifier());
}
public static String getBundleColumnName()
{
return BUNDLE_COLUMN_NAME;
}
public Collection ejbFindAll() throws FinderException {
return idoFindAllIDsBySQL();
}
public Collection ejbFindAllByObjectType(String type) throws FinderException
{
//return super.idoFindPKsByQuery(super.idoQueryGetSelect().appendWhere().appendEqualsQuoted(this.getObjectTypeColumnName(), type));
Table table = new Table(this);
SelectQuery query = new SelectQuery(table);
query.addColumn(new WildCardColumn());
query.addCriteria(new MatchCriteria(table,ICObjectBMPBean.getObjectTypeColumnName(),MatchCriteria.EQUALS,type,true));
return idoFindPKsByQuery(query);
}
public Collection ejbFindAllByObjectTypeAndBundle(String type, String bundle) throws FinderException
{
Table table = new Table(this);
SelectQuery query = new SelectQuery(table);
query.addColumn(new WildCardColumn());
query.addCriteria(new MatchCriteria(table,ICObjectBMPBean.getObjectTypeColumnName(),MatchCriteria.EQUALS,type,true));
query.addCriteria(new MatchCriteria(table,ICObjectBMPBean.getBundleColumnName(),MatchCriteria.EQUALS,bundle,true));
/*
IDOQuery query =
super.idoQueryGetSelect().appendWhere().appendEqualsQuoted(this.getObjectTypeColumnName(), type)
.appendAndEqualsQuoted(this.getBundleColumnName(),bundle);
*/
//System.out.println(query.toString());
return super.idoFindPKsByQuery(query);
}
public Collection ejbFindAllByBundle(String bundle) throws FinderException{
//return super.idoFindPKsByQuery(super.idoQueryGetSelect().appendWhere().appendEqualsQuoted(this.getBundleColumnName(), bundle));
Table table = new Table(this);
SelectQuery query = new SelectQuery(table);
query.addColumn(new WildCardColumn());
query.addCriteria(new MatchCriteria(table,ICObjectBMPBean.getBundleColumnName(),MatchCriteria.EQUALS,bundle,true));
return idoFindPKsByQuery(query);
}
public Object ejbFindByClassName(String className) throws FinderException{
//return super.idoFindOnePKByQuery(super.idoQueryGetSelect().appendWhere().appendEqualsQuoted(getClassNameColumnName(), className));
Table table = new Table(this);
SelectQuery query = new SelectQuery(table);
query.addColumn(new WildCardColumn());
query.addCriteria(new MatchCriteria(table,ICObjectBMPBean.getClassNameColumnName(),MatchCriteria.EQUALS,className,true));
return idoFindOnePKByQuery(query);
}
public Collection ejbFindAllBlocksByBundle(String bundle) throws FinderException
{
return ejbFindAllByObjectTypeAndBundle(COMPONENT_TYPE_BLOCK, bundle);
}
public Collection ejbFindAllBlocks() throws FinderException
{
return ejbFindAllByObjectType(COMPONENT_TYPE_BLOCK);
}
public Collection ejbFindAllElementsByBundle(String bundle) throws FinderException
{
return ejbFindAllByObjectTypeAndBundle(COMPONENT_TYPE_ELEMENT, bundle);
}
public Collection ejbFindAllElements() throws FinderException
{
return ejbFindAllByObjectType(COMPONENT_TYPE_ELEMENT);
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Object obj) {
if (obj instanceof ICObject) {
return Collator.getInstance().compare(this.getName(), ((ICObject)obj).getName());
}
return super.compareTo(obj);
}
}