package com.idega.presentation;
import java.util.Collection;
import java.util.Vector;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWMainApplication;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.Parameter;
import com.idega.presentation.util.Edit;
import com.idega.repository.data.RefactorClassRegistry;
/**
* Title: idegaclasses
* Description:
* Copyright: Copyright (c) 2001
* Company:
* @author <a href="mailto:aron@idega.is">aron@idega.is
* @version 1.0
*/
public class BlockMenu extends Block {
protected IWResourceBundle iwrb;
protected IWBundle iwb;
private IWBundle core ;
private Collection objects = null;
private Collection paramtersToMainTain = null;
private String prmObjectClass = "obj_clss";
private Class defaultClass = null;
private boolean showLinks = true;
private String fontStyle = "color:#000000;font-size:8pt;font-family:Arial,Helvetica,sans-serif;font-weight:bold;" ;
private String fontStyle2 = "color:#942829;font-size:9pt;font-family:Arial,Helvetica,sans-serif;font-weight:bold;" ;
protected void control(IWContext iwc){
this.iwrb = getResourceBundle(iwc);
this.iwb = getBundle(iwc);
Table T = new Table();
T.setWidth("100%");
T.setCellpadding(0);
T.setCellspacing(10);
String className = null;
if(iwc.isParameterSet(this.prmObjectClass)){
className = iwc.getParameter(this.prmObjectClass);
iwc.setSessionAttribute(this.prmObjectClass,className);
}
else if(iwc.getSessionAttribute(this.prmObjectClass)!=null){
className = (String) iwc.getSessionAttribute(this.prmObjectClass);
}
else if(this.defaultClass !=null){
className = String.valueOf(this.defaultClass.hashCode());
}
/*
if(paramtersToMainTain!=null)
System.err.println("parameter collection size is "+paramtersToMainTain.size());
else
System.err.println("parameter collection size is null");
*/
if(className !=null){
try{
if(this.showLinks) {
T.add(getLinkTable(iwc,className),1,1);
}
Object obj = RefactorClassRegistry.forName(IWMainApplication.decryptClassName(className)).newInstance();
if(obj instanceof Block) {
T.add((Block)obj,1,2);
}
}
catch(Exception e){}
}
else{
T.add(getBoxedLinks(iwc,className),1,1);
}
add(T);
}
public void setClassParameterName(String parametername){
this.prmObjectClass = parametername;
}
public void setDefaultBlock(Class defaultClass){
this.defaultClass = defaultClass;
}
public void setFontStyle(String style){
}
public PresentationObject getBoxedLinks(IWContext iwc,String currentClassName){
Table frame = new Table(3,3);
frame.setWidth("100%");
frame.setHeight("100%");
Table box = new Table();
int row = 1;
if(this.objects != null){
java.util.Iterator I = this.objects.iterator();
Block obj;
while(I.hasNext()){
obj = (Block) I.next();
box.add(getLink(obj.getClass(),formatText(obj.getLocalizedName(iwc))),1,row++);
}
}
box.setColor(Edit.colorLight);
frame.add(box,2,2);
return frame;
}
public PresentationObject getLinkTable(IWContext iwc,String currentClassName){
Table frame = new Table();
//frame.setWidth("100%");
frame.setCellpadding(2);
frame.setCellspacing(2);
int row = 1;
int col = 1;
if(this.objects != null){
frame.add(Edit.formatText("|"),col,row);
col++;
java.util.Iterator I = this.objects.iterator();
Block obj;
String decryptedClassName ;
boolean highlight;
while(I.hasNext()){
obj = (Block) I.next();
// shorted
decryptedClassName = String.valueOf(obj.getClass().hashCode());
highlight = decryptedClassName.equals(currentClassName);
frame.add(getLink(obj.getClass(),formatText(obj.getLocalizedName(iwc)),highlight),col,row);
col++;
frame.add(formatText("|"),col,row);
col++;
}
}
return frame;
}
private Text formatText(String text){
if ( text == null ) {
text = "";
}
Text T =new Text(text);
T.setFontStyle(this.fontStyle);
return T;
}
public Link getLink(Class cl,Text name){
Link L = new Link(name);
L.addParameter(getObjectParameter(cl));
if(this.paramtersToMainTain !=null){
java.util.Iterator I = this.paramtersToMainTain.iterator();
while(I.hasNext()){
L.addParameter((Parameter) I.next());
}
}
L.setFontSize(1);
L.setFontColor(Edit.colorDark);
L.setFontStyle(this.fontStyle);
return L;
}
public Link getLink(Class cl,Text name,boolean highlighted){
Link L = new Link(name);
L.addParameter(getObjectParameter(cl));
if(this.paramtersToMainTain !=null){
java.util.Iterator I = this.paramtersToMainTain.iterator();
while(I.hasNext()){
L.addParameter((Parameter) I.next());
}
}
L.setFontSize(1);
L.setFontColor(Edit.colorDark);
if(highlighted) {
L.setFontStyle(this.fontStyle2);
}
else {
L.setFontStyle(this.fontStyle);
}
return L;
}
public void addParameterToMaintain(Parameter prm){
if(this.paramtersToMainTain==null) {
this.paramtersToMainTain = new Vector();
}
this.paramtersToMainTain.add(prm);
}
public Parameter getObjectParameter(Class objectClass){
return new Parameter(this.prmObjectClass,IWMainApplication.getEncryptedClassName(objectClass));
}
public void setShowLinks(boolean show){
this.showLinks = show;
}
public void addBlock(Class obj){
if(this.objects == null) {
this.objects = new java.util.Vector();
}
try {
this.objects.add(obj.newInstance());
}
catch (Exception ex) {
}
}
public void addBlock(Block obj){
if(this.objects == null) {
this.objects = new java.util.Vector();
}
this.objects.add(obj);
}
public void addAll(Collection blocks){
if(this.objects == null) {
this.objects = new java.util.Vector();
}
this.objects.addAll(blocks);
}
public void main(IWContext iwc){
control(iwc);
}
public synchronized Object clone() {
BlockMenu obj = null;
try {
obj = (BlockMenu)super.clone();
obj.objects = this.objects;
obj.paramtersToMainTain = this.paramtersToMainTain;
}
catch(Exception ex) {
ex.printStackTrace(System.err);
}
return obj;
}
}