/*
* $Id: BuilderLogic.java,v 1.380 2009/06/17 12:35:07 valdas 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.builder.business;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.FinderException;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.render.RenderKitFactory;
import org.apache.myfaces.renderkit.html.util.HtmlBufferResponseWriterWrapper;
import org.htmlcleaner.HtmlCleaner;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.springframework.beans.factory.annotation.Autowired;
import com.idega.block.web2.business.JQuery;
import com.idega.block.web2.business.Web2Business;
import com.idega.builder.bean.AdminToolbarSession;
import com.idega.builder.bean.AdvancedProperty;
import com.idega.builder.facelets.BuilderFaceletConverter;
import com.idega.builder.presentation.AddModuleBlock;
import com.idega.builder.presentation.AdminToolbar;
import com.idega.builder.presentation.IBAddRegionLabelWindow;
import com.idega.builder.presentation.IBCopyModuleWindow;
import com.idega.builder.presentation.IBCutModuleWindow;
import com.idega.builder.presentation.IBDeleteModuleWindow;
import com.idega.builder.presentation.IBLockRegionWindow;
import com.idega.builder.presentation.IBObjectControl;
import com.idega.builder.presentation.IBPasteModuleWindow;
import com.idega.builder.presentation.IBPermissionWindow;
import com.idega.builder.presentation.IBPropertiesWindow;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.business.chooser.helper.CalendarsChooserHelper;
import com.idega.business.chooser.helper.GroupsChooserHelper;
import com.idega.cal.bean.CalendarPropertiesBean;
import com.idega.core.accesscontrol.business.AccessControl;
import com.idega.core.accesscontrol.business.AccessController;
import com.idega.core.accesscontrol.business.StandardRoles;
import com.idega.core.builder.business.BuilderPageException;
import com.idega.core.builder.business.ICBuilderConstants;
import com.idega.core.builder.data.CachedDomain;
import com.idega.core.builder.data.ICDomain;
import com.idega.core.builder.data.ICDomainHome;
import com.idega.core.builder.data.ICPage;
import com.idega.core.builder.data.ICPageBMPBean;
import com.idega.core.builder.data.ICPageHome;
import com.idega.core.builder.presentation.ICPropertyHandler;
import com.idega.core.cache.IWCacheManager2;
import com.idega.core.component.bean.RenderedComponent;
import com.idega.core.component.business.ICObjectBusiness;
import com.idega.core.component.data.ICObject;
import com.idega.core.component.data.ICObjectHome;
import com.idega.core.component.data.ICObjectInstance;
import com.idega.core.component.data.ICObjectInstanceHome;
import com.idega.core.data.GenericGroup;
import com.idega.core.data.ICTreeNode;
import com.idega.core.localisation.business.ICLocaleBusiness;
import com.idega.core.view.ViewManager;
import com.idega.core.view.ViewNode;
import com.idega.data.IDOContainer;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.IDOStoreException;
import com.idega.event.EventLogic;
import com.idega.idegaweb.DefaultIWBundle;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.idegaweb.IWApplicationContextFactory;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWCacheManager;
import com.idega.idegaweb.IWConstants;
import com.idega.idegaweb.IWMainApplication;
import com.idega.idegaweb.IWProperty;
import com.idega.idegaweb.IWPropertyList;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.idegaweb.IWUserContext;
import com.idega.idegaweb.block.presentation.Builderaware;
import com.idega.presentation.CSSSpacer;
import com.idega.presentation.HtmlPage;
import com.idega.presentation.HtmlPageRegion;
import com.idega.presentation.IFrameContainer;
import com.idega.presentation.IWContext;
import com.idega.presentation.Image;
import com.idega.presentation.Layer;
import com.idega.presentation.Page;
import com.idega.presentation.PresentationObject;
import com.idega.presentation.PresentationObjectContainer;
import com.idega.presentation.Span;
import com.idega.presentation.Table;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.HiddenInput;
import com.idega.repository.data.Instantiator;
import com.idega.repository.data.Singleton;
import com.idega.repository.data.SingletonRepository;
import com.idega.servlet.filter.BaseFilter;
import com.idega.slide.business.IWSlideService;
import com.idega.slide.business.IWSlideSession;
import com.idega.user.bean.PropertiesBean;
import com.idega.user.business.UserBusiness;
import com.idega.user.data.User;
import com.idega.util.CoreConstants;
import com.idega.util.CoreUtil;
import com.idega.util.FileUtil;
import com.idega.util.IWTimestamp;
import com.idega.util.ListUtil;
import com.idega.util.PresentationUtil;
import com.idega.util.RenderUtils;
import com.idega.util.StringHandler;
import com.idega.util.StringUtil;
import com.idega.util.URIUtil;
import com.idega.util.datastructures.map.MapUtil;
import com.idega.util.expression.ELUtil;
import com.idega.util.reflect.MethodFinder;
import com.idega.util.reflect.MethodInvoker;
import com.idega.util.reflect.PropertyCache;
import com.idega.util.xml.XmlUtil;
import com.idega.xml.XMLAttribute;
import com.idega.xml.XMLDocument;
import com.idega.xml.XMLElement;
/**
* <p>
* This class is the main "buisiness logic" class for the Builder.<br>
* All interface actions are sent to this class and this class manages other helper classes such as PageCacher,IBXMLReader,IBXMLWriter etc.
* </p>
*
* @author <a href="tryggvi@idega.is">Tryggvi Larusson </a>
*
* Last modified: $Date: 2009/06/17 12:35:07 $ by $Author: valdas $
* @version 1.0
*/
public class BuilderLogic implements Singleton {
private static final Logger logger = Logger.getLogger(BuilderLogic.class.getName());
private static final String PAGES_PREFIX = "/pages/";
public static final String IB_PARENT_PARAMETER = "ib_parent_par";
public static final String IB_LABEL_PARAMETER = "ib_label";
public static final String IB_LIBRARY_NAME = "ib_library_name";
public static final String ACTION_DELETE = "ACTION_DELETE";
public static final String ACTION_ADD = "ACTION_ADD";
public static final String ACTION_MOVE = "ACTION_MOVE";
public static final String ACTION_LOCK_REGION = "ACTION_LOCK";
public static final String ACTION_UNLOCK_REGION = "ACTION_UNLOCK";
public static final String ACTION_PERMISSION = "ACTION_PERMISSION";
public static final String ACTION_LABEL = "ACTION_LABEL";
public static final String ACTION_COPY = "ACTION_COPY";
public static final String ACTION_PASTE = "ACTION_PASTE";
public static final String ACTION_PASTE_ABOVE = "ACTION_PASTE_ABOVE";
public static final String ACTION_LIBRARY = "ACTION_LIBRARY";
/**
*This is the key that holds the page in the builder session
**/
private static final String SESSION_PAGE_KEY = "ib_page_id";
public static final String SESSION_OBJECT_STATE = BuilderConstants.SESSION_OBJECT_STATE;
public static final String PRM_HISTORY_ID = BuilderConstants.PRM_HISTORY_ID;
public static final String IMAGE_ID_SESSION_ADDRESS = "ib_image_id";
public static final String IMAGE_IC_OBJECT_INSTANCE_SESSION_ADDRESS = "ic_object_id_image";
private static final String IB_APPLICATION_RUNNING_SESSION = "ib_application_running";
//private static final String DEFAULT_PAGE = "1";
public static final String CLIPBOARD = "user_clipboard";
private Pattern doctypeReplacementPattern;
private Pattern commentinHtmlReplacementPattern;
private List<Pattern> xmlEncodingReplacementPatterns = null;
private static Instantiator instantiator = new Instantiator() {
@Override
public Object getInstance() {
return new BuilderLogic();
}
};
public static final String PAGE_FORMAT_IBXML="IBXML";
public static final String PAGE_FORMAT_HTML="HTML";
public static final String PAGE_FORMAT_JSP_1_2="JSP_1_2";
public static final String PAGE_FORMAT_FACELET="FACELET";
public static final String PAGE_FORMAT_IBXML2="IBXML2";
private String[] pageFormats = {PAGE_FORMAT_IBXML,PAGE_FORMAT_IBXML2,PAGE_FORMAT_HTML,PAGE_FORMAT_JSP_1_2,PAGE_FORMAT_FACELET};
//private volatile Web2Business web2 = null;
private IWSlideService slideService = null;
private XMLOutputter outputter = null;
@Autowired
private Web2Business web2;
@Autowired
private JQuery jQuery;
protected BuilderLogic() {
// empty
}
public static BuilderLogic getInstance() {
return (BuilderLogic) SingletonRepository.getRepository().getInstance(BuilderLogic.class, instantiator);
}
public static void unload() {
SingletonRepository.getRepository().unloadInstance(BuilderLogic.class);
}
public boolean updatePage(int id) {
String theID = Integer.toString(id);
CachedBuilderPage xml = getPageCacher().getCachedBuilderPage(theID);
xml.store();
getPageCacher().flagPageInvalid(theID);
return (true);
}
public CachedBuilderPage getCachedBuilderPage(String key) {
return getPageCacher().getCachedBuilderPage(key);
}
// .getICPage()
public ICPage getICPage(String key) {
return getPageCacher().getCachedBuilderPage(key).getICPage();
}
public IBXMLPage getIBXMLPage(String pageKey) throws Exception {
return getPageCacher().getIBXML(pageKey);
}
public Page getPage(String pageKey, IWContext iwc) {
return getPageCacher().getComponentBasedPage(pageKey).getPage(iwc);
}
/*
public Page getPage(int id, boolean builderview, IWContext iwc) {
try {
boolean permissionview = false;
if (iwc.isParameterSet("ic_pm") && iwc.isSuperAdmin()) {
permissionview = true;
}
Page page = getPageCacher().getPage(Integer.toString(id), iwc);
if (builderview && iwc.hasEditPermission(page)) {
return (BuilderLogic.getInstance().getBuilderTransformed(Integer.toString(id), page, iwc));
}
else if (permissionview) {
int groupId = -1906;
String bla = iwc.getParameter("ic_pm");
if (bla != null) {
try {
groupId = Integer.parseInt(bla);
}
catch (NumberFormatException ex) {
}
}
page = getPageCacher().getPage(Integer.toString(id));
return (BuilderLogic.getInstance().getPermissionTransformed(groupId, Integer.toString(id), page, iwc));
}
else {
return (page);
}
}
catch (Exception e) {
e.printStackTrace();
Page theReturn = new Page();
theReturn.add("Page invalid");
return (theReturn);
}
}*/
private String getBuilderSessionMode() {
AdminToolbarSession session = null;
try {
session = ELUtil.getInstance().getBean(AdminToolbarSession.class);
} catch(Exception e) {
logger.log(Level.WARNING, "Error getting bean: " + AdminToolbarSession.class, e);
}
if (session == null) {
return null;
}
return session.getMode();
}
/**
* *
*/
public Page getBuilderTransformed(String pageKey, Page page, IWContext iwc) {
IWBundle iwb = getBuilderBundle();
IWResourceBundle iwrb = iwb.getResourceBundle(iwc);
String builderMode = getBuilderSessionMode();
addResourcesForBuilderEditMode(iwc, iwb, builderMode);
//if we want to use Sortable (javascript from the DnD library) someday
page.setID("DnDPage");
//Begin with transforming the objects on a normal Page object (constructed from IBXML)
List<UIComponent> list = page.getChildren();
if (!ListUtil.isEmpty(list)) {
PresentationObjectContainer parent = page;
int index = 0;
for (UIComponent item: list) {
getTransformedObject(page,pageKey, item, index, parent, "-1", iwc);
index++;
}
}
if (iwc.getRequestURI().indexOf("/workspace/") == -1 && iwc.getRequestURI().indexOf("/pages") != -1 &&
(iwc.hasRole(StandardRoles.ROLE_KEY_ADMIN) || iwc.hasRole(StandardRoles.ROLE_KEY_AUTHOR) || iwc.hasRole(StandardRoles.ROLE_KEY_EDITOR))) {
page.getChildren().add(new AdminToolbar());
page.setStyleClass("isAdmin");
if (builderMode != null) {
page.setStyleClass(builderMode);
}
}
else if (iwc.hasRole(StandardRoles.ROLE_KEY_ADMIN) || iwc.hasRole(StandardRoles.ROLE_KEY_AUTHOR) || iwc.hasRole(StandardRoles.ROLE_KEY_EDITOR)) {
page.setStyleClass("isContentAdmin");
page.setStyleClass("isEditAdmin");
}
String addModuleUri = null;
//"-1" is identified as the top page object (parent)
if (page.getIsExtendingTemplate()) {
if (!page.isLocked()) {
String parentKey = Integer.toString(-1);
String regionKey = "page";
addModuleUri = getUriToAddModuleWindow(regionKey);
Layer marker = getLabelMarker(parentKey, regionKey);
addButtonsLayer(marker, addModuleUri, regionKey, iwrb, marker.getId());
marker.addAtBeginning(new CSSSpacer());
page.add(marker);
}
if (page instanceof HtmlPage) {
HtmlPage hPage = (HtmlPage) page;
for (String regionKey: hPage.getRegionIds()) {
addModuleUri = getUriToAddModuleWindow(regionKey);
Layer marker = getLabelMarker(regionKey, regionKey);
addButtonsLayer(marker, addModuleUri, regionKey, iwrb, marker.getId());
hPage.add(marker,regionKey);
}
}
}
else {
boolean mayAddButtonsInPage=true;
CachedBuilderPage iPage = this.getCachedBuilderPage(pageKey);
if(iPage.getPageFormat().equals("HTML")){
mayAddButtonsInPage=false;
if(page instanceof HtmlPage){
HtmlPage hPage = (HtmlPage)page;
for (String regionKey: hPage.getRegionIds()) {
Text regionText = new Text(regionKey);
regionText.setFontColor("red");
hPage.add(regionText,regionKey);
}
}
}
Layer buttonsLayer = null;
if(mayAddButtonsInPage){
String parentKey = Integer.toString(-1);
String regionKey = "page";
addModuleUri = getUriToAddModuleWindow(regionKey);
Layer marker = getLabelMarker(parentKey, regionKey);
buttonsLayer = addButtonsLayer(marker, addModuleUri, regionKey, iwrb, marker.getId());
page.add(marker);
}
if (page.getIsTemplate()){
if (page.isLocked()){
if (buttonsLayer != null) {
buttonsLayer.add(getLockedIcon(Integer.toString(-1), iwc, null));
}
else {
page.add(getLockedIcon(Integer.toString(-1), iwc, null));
}
}
else{
if (buttonsLayer != null) {
buttonsLayer.add(getUnlockedIcon(Integer.toString(-1), iwc));
}
else {
page.add(getUnlockedIcon(Integer.toString(-1), iwc));
}
}
}
}
return (page);
}
public void addResourcesForBuilderEditMode(IWContext iwc){
IWBundle builderBundle = iwc.getIWMainApplication().getBundle(BuilderConstants.IW_BUNDLE_IDENTIFIER);
addResourcesForBuilderEditMode(iwc, builderBundle, getBuilderSessionMode());
}
private Web2Business getWeb2Business() {
if (web2 == null) {
ELUtil.getInstance().autowire(this);
}
return web2;
}
private JQuery getJQUery() {
if (jQuery == null) {
ELUtil.getInstance().autowire(this);
}
return jQuery;
}
private void addResourcesForBuilderEditMode(IWContext iwc, IWBundle builderBundle, String mode) {
Web2Business web2 = getWeb2Business();
// JavaScript
try {
PresentationUtil.addJavaScriptSourcesLinesToHeader(iwc, Arrays.asList(
CoreConstants.DWR_ENGINE_SCRIPT,
CoreConstants.DWR_UTIL_SCRIPT,
"/dwr/interface/BuilderEngine.js",
builderBundle.getVirtualPathWithFileNameString("javascript/BuilderHelper.js"),
builderBundle.getVirtualPathWithFileNameString("javascript/BuilderDragDropHelper.js"),
web2.getBundleURIToMootoolsLib(),
web2.getMoodalboxScriptFilePath(Boolean.TRUE),
web2.getReflectionForMootoolsScriptFilePath(),
web2.getBundleUriToMootabsScript()
));
} catch(Exception e) {
e.printStackTrace();
}
// JavaScript actions
mode = mode == null ? CoreConstants.EMPTY : mode;
PresentationUtil.addJavaScriptActionsToBody(iwc, Arrays.asList(
new StringBuilder("window.addEvent('load', function() { BuilderHelper.initializeBuilder('").append(mode).append("'); });").toString(),
"window.addEvent('resize', intializeMoodalboxInBuilder);",
"window.addEvent('beforeunload', showMessageForUnloadingPage);"
));
// CSS
try {
PresentationUtil.addStyleSheetsToHeader(iwc, Arrays.asList(
builderBundle.getVirtualPathWithFileNameString("style/builder.css"),
web2.getMoodalboxStyleFilePath(),
web2.getBundleUriToMootabsStyle()
));
} catch(Exception e) {
e.printStackTrace();
}
}
private Layer getLabelMarker(String instanceId, String parentKey) {
Layer marker = new Layer(Layer.DIV);
marker.setStyleClass("regionLabel");
if (instanceId == null) {
Random generator = new Random();
marker.setId(new StringBuffer("region_label").append(generator.nextInt(Integer.MAX_VALUE)).toString());
}
else {
marker.setMarkupAttribute("instanceid", instanceId);
Layer labelContainer = new Layer();
marker.add(labelContainer);
HiddenInput regionLabel = new HiddenInput("region_label", instanceId);
marker.add(regionLabel);
if (instanceId.indexOf(BuilderConstants.DOT) != -1) {
Random generator = new Random();
marker.setId(new StringBuffer("region_label").append(generator.nextInt(Integer.MAX_VALUE)).toString());
}
else {
marker.setId(new StringBuffer("region_label").append(instanceId).toString());
}
}
if (parentKey != null) {
marker.add(new HiddenInput("parentKey", parentKey));
}
return marker;
}
public Page getPermissionTransformed(int groupId, Page page, IWContext iwc) {
List<Integer> groupIds = new ArrayList<Integer>();
groupIds.add(groupId);
try {
List groups = AccessControl.getPermissionGroups(((com.idega.core.data.GenericGroupHome) com.idega.data.IDOLookup.getHomeLegacy(GenericGroup.class)).findByPrimaryKeyLegacy(groupId));
if (groups != null) {
Iterator iter = groups.iterator();
while (iter.hasNext()) {
com.idega.core.data.GenericGroup item = (GenericGroup) iter.next();
groupIds.add(item.getID());
}
}
}
catch (Exception ex) {
// empty block
}
int index = 0;
for (UIComponent item: page.getChildren()) {
if (item instanceof PresentationObject) {
filterForPermission(groupIds, (PresentationObject) item, page, index, iwc);
}
index++;
}
return page;
}
private void filterForPermission(List<Integer> groupIds, PresentationObject obj, PresentationObjectContainer parentObject, int index, IWContext iwc) {
if (!iwc.hasViewPermission(groupIds, obj)) {
logger.severe(obj + ": removed");
parentObject.getChildren().remove(index);
parentObject.getChildren().add(index, PresentationObject.NULL_CLONE_OBJECT);
}
else if (obj.isContainer()) {
if (obj instanceof Table) {
Table tab = (Table) obj;
int cols = tab.getColumns();
int rows = tab.getRows();
for (int x = 1; x <= cols; x++) {
for (int y = 1; y <= rows; y++) {
PresentationObjectContainer moc = tab.containerAt(x, y);
if (moc != null) {
List l = moc.getChildren();
if (l != null) {
ListIterator iterT = l.listIterator();
while (iterT.hasNext()) {
int index2 = iterT.nextIndex();
Object itemT = iterT.next();
if (itemT instanceof PresentationObject) {
filterForPermission(groupIds, (PresentationObject) itemT, moc, index2, iwc);
}
}
}
}
}
}
}
else {
List list = obj.getChildren();
if (list != null) {
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
int index2 = iter.nextIndex();
PresentationObject item = (PresentationObject) iter.next();
filterForPermission(groupIds, item, (PresentationObjectContainer) obj, index2, iwc);
}
}
}
}
}
private void processImageSet(String pageKey, String instanceId, int imageID, IWMainApplication iwma) {
setProperty(pageKey, instanceId, "image_id", Integer.toString(imageID), iwma);
}
public PresentationObject getTransformedObject(Page currentPage, String pageKey, UIComponent obj, int index, PresentationObjectContainer parent, String parentKey, IWContext iwc) {
IWResourceBundle iwrb = getBuilderBundle().getResourceBundle(iwc);
XMLElement pasted = (XMLElement) iwc.getSessionAttribute(CLIPBOARD);
boolean clipboardEmpty = (pasted == null);
//We can either be working with pure UIComponents or PresentationObjects
boolean isPresentationObject = obj instanceof PresentationObject;
//Some very special cases, added the boolean to make it faster
/*if (isPresentationObject && obj instanceof Image) {
obj = transformImage(pageKey, obj, iwc);
}
else*/ if ( isPresentationObject && ((PresentationObject)obj).isContainer()) {
if (obj instanceof Table) {
getTransformedTable(currentPage, pageKey, obj, iwc, clipboardEmpty);
}
else {
List list = obj.getChildren();
if (list != null && !list.isEmpty()) {
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
int index2 = iter.nextIndex();
UIComponent item = (UIComponent) iter.next();
/**
* If parent is Table
*/
if (index == -1) {
getTransformedObject(currentPage,pageKey, item, index2, (PresentationObjectContainer) obj, parentKey, iwc);
}
else {
String newParentKey = null;
//Ugly Hack of handling the regions inside HTML template based pages. This needs to change.
//TODO: Remove this instanceof case, to make that possible then the getICObjectInstanceID
// method needs to be changed to return String
if(obj instanceof HtmlPageRegion){
HtmlPageRegion region = (HtmlPageRegion)obj;
//newParentKey is normally an ICObjectInstanceId or -1 to mark the top page
//but here we make a workaround.
newParentKey = region.getRegionId();
}
else{
newParentKey = getInstanceId(obj);
}
getTransformedObject(currentPage,pageKey, item, index2, (PresentationObjectContainer) obj, newParentKey, iwc);
}
}
}
if (index != -1) {
Page curr = getPageCacher().getComponentBasedPage(getCurrentIBPage(iwc)).getNewPage(iwc);
PresentationObjectContainer container = ((PresentationObjectContainer) obj);
String instanceId = getInstanceId(obj);
if (instanceId == null) {
instanceId = obj.getId();
}
String regionLabel = container.getLabel();
String addModuleUri = getUriToAddModuleWindow(regionLabel);
if (curr.getIsExtendingTemplate()) {
if (container.getBelongsToParent()) {
if (!container.isLocked()) {
Layer marker = getLabelMarker(instanceId, regionLabel);
addButtonsLayer(marker, addModuleUri, regionLabel, iwrb, marker.getId());
container.add(marker);
}
}
else {
Layer marker = getLabelMarker(instanceId, regionLabel);
Layer buttons = addButtonsLayer(marker, addModuleUri, regionLabel, iwrb, marker.getId());
container.add(marker);
if (curr.getIsTemplate()) {
buttons.add(getLabelIcon(instanceId, iwc, regionLabel));
if (container.isLocked()){
buttons.add(getLockedIcon(instanceId, iwc, regionLabel));
}
else{
buttons.add(getUnlockedIcon(instanceId, iwc));
}
}
}
}
else {
Layer marker = getLabelMarker(instanceId, regionLabel);
Layer buttons = addButtonsLayer(marker, addModuleUri, regionLabel, iwrb, marker.getId());
container.add(marker);
if (curr.getIsTemplate()) {
marker.add(getLabelIcon(instanceId, iwc, regionLabel));
if (container.isLocked()){
buttons.add(getLockedIcon(instanceId, iwc, regionLabel));
}
else{
buttons.add(getUnlockedIcon(instanceId, iwc));
}
}
}
}
}
}
PresentationObject transformed = null;
if ((isPresentationObject && ((PresentationObject) obj).getUseBuilderObjectControl()) || !isPresentationObject) {
if (index != -1) {
boolean lastModuleInRegion = false;
if (index >= parent.getChildCount()) {
lastModuleInRegion = true;
} else if (index == (parent.getChildCount() - 1)) {
lastModuleInRegion = true;
}
boolean objectFromCurrentPage = true;
try {
IBXMLPage page = getIBXMLPage(pageKey);
objectFromCurrentPage = getIBXMLWriter().findModule(page, getInstanceId(obj)) != null;
} catch (Exception e) {
e.printStackTrace();
}
transformed = new IBObjectControl(obj, parent, parentKey, iwc, index, lastModuleInRegion, objectFromCurrentPage);
if (index < parent.getChildCount()) {
parent.set(index, transformed);
}
else {
parent.add(transformed);
index++;
}
}
return transformed;
}
if (isPresentationObject) {
return (PresentationObject) obj;
}
return null;
}
/**
* @param currentPage
* @param pageKey
* @param obj
* @param iwc
* @param clipboardEmpty
*/
public PresentationObject getTransformedTable(Page currentPage, String pageKey, UIComponent obj, IWContext iwc, boolean clipboardEmpty) {
IWResourceBundle iwrb = getBuilderBundle().getResourceBundle(iwc);
Table tab = (Table) obj;
int cols = tab.getColumns();
int rows = tab.getRows();
for (int x = 1; x <= cols; x++) {
for (int y = 1; y <= rows; y++) {
PresentationObjectContainer moc = tab.containerAt(x, y);
String newParentKey = tab.getICObjectInstanceID() + CoreConstants.DOT + x + CoreConstants.DOT + y;
if (moc != null) {
String id = newParentKey;
getTransformedObject(currentPage, pageKey, moc, -1, tab, newParentKey, iwc);
id = id.replace(CoreConstants.DOT, CoreConstants.UNDER);
moc.setId(id);
}
String regionLabel = tab.getLabel(x, y);
String addModuleUri = getUriToAddModuleWindow(regionLabel);
if (currentPage.getIsExtendingTemplate()) {
if (tab.getBelongsToParent()) {
if (!tab.isLocked(x, y)) {
Layer marker = getLabelMarker(newParentKey, regionLabel);
addButtonsLayer(marker, addModuleUri, regionLabel, iwrb, marker.getId());
tab.add(marker, x, y);
}
}
else {
Layer marker = getLabelMarker(newParentKey, regionLabel);
Layer buttons = addButtonsLayer(marker, addModuleUri, regionLabel, iwrb, marker.getId());
tab.add(marker, x, y);
if (currentPage.getIsTemplate()) {
marker.add(getLabelIcon(newParentKey, iwc, regionLabel));
if (tab.isLocked(x, y)){
buttons.add(getLockedIcon(newParentKey, iwc, regionLabel));
}
else{
buttons.add(getUnlockedIcon(newParentKey, iwc));
}
}
}
}
else {
Layer marker = getLabelMarker(newParentKey, regionLabel);
Layer buttons = addButtonsLayer(marker, addModuleUri, regionLabel, iwrb, marker.getId());
tab.add(marker, x, y);
if (currentPage.getIsTemplate()) {
marker.add(getLabelIcon(newParentKey, iwc, regionLabel));
if (tab.isLocked(x, y)){
buttons.add(getLockedIcon(newParentKey, iwc, regionLabel));
}
else{
buttons.add(getUnlockedIcon(newParentKey, iwc));
}
}
}
}
}
return tab;
}
/**
* @param pageKey
* @param obj
* @param iwc
* @return
*/
protected UIComponent transformImage(String pageKey, UIComponent obj, IWContext iwc) {
Image imageObj = (Image) obj;
boolean useBuilderObjectControl = imageObj.getUseBuilderObjectControl();
int ICObjectIntanceID = imageObj.getICObjectInstanceID();
String sessionID = "ic_" + ICObjectIntanceID;
String session_image_id = (String) iwc.getSessionAttribute(sessionID);
if (session_image_id != null) {
int image_id = Integer.parseInt(session_image_id);
/**
* @todo Change this so that id is done in a more appropriate place,
* i.e. set the image_id permanently on the image
*/
processImageSet(pageKey, Integer.toString(ICObjectIntanceID), image_id, iwc.getIWMainApplication());
iwc.removeSessionAttribute(sessionID);
imageObj.setImageID(image_id);
}
IBImageInserter inserter = null;
inserter = (new IBClassesFactory()).createImageInserterImpl();
inserter.setHasUseBox(false);
String width = imageObj.getWidth();
String height = imageObj.getHeight();
inserter.limitImageWidth(false);
if (width != null) {
inserter.setWidth(width);
}
if (height != null) {
inserter.setHeight(height);
}
int image_id = imageObj.getImageID(iwc);
if (image_id != -1) {
inserter.setImageId(image_id);
}
inserter.setImSessionImageName(sessionID);
inserter.setWindowToReload(true);
//inserter.maintainSessionParameter();
obj = (PresentationObject) inserter;
((PresentationObject)obj).setICObjectInstanceID(ICObjectIntanceID);
((PresentationObject)obj).setUseBuilderObjectControl(useBuilderObjectControl);
return obj;
}
public ICPage getCurrentIBPageEntity(IWContext iwc) throws Exception {
String sID = getCurrentIBPage(iwc);
//if(sID!=null){
return ((com.idega.core.builder.data.ICPageHome) com.idega.data.IDOLookup.getHomeLegacy(ICPage.class)).findByPrimaryKeyLegacy(Integer.parseInt(sID));
//}
}
/**
* Returns the current IBPageID that the user has requested
*/
public int getCurrentIBPageID(IWContext iwc) {
String theReturn = getCurrentIBPage(iwc);
if (theReturn == null) {
return -1;
}
try {
return Integer.parseInt(theReturn);
} catch(NumberFormatException e) {
e.printStackTrace();
}
return -1;
}
/*public String getPageKeyByURIAndServerName(String requestURI,String serverName){
try{
return getPageKeyByURI(requestURI);
}
catch(NumberFormatException nfe){
//nothing printed out here
}
catch(Exception e){
e.printStackTrace();
}
String theReturn = String.valueOf(getStartPageIdByServerName(serverName));
if (theReturn == null) {
return Integer.toString(getCurrentDomain().getStartPageID());
}
return theReturn;
}*/
/**
* Tries to find the uri in the cache of builder pages
* @param requestURI
* @return
*/
public String getPageKeyByURICached(String pageUri){
Iterator iter = getPageCacher().getPageCacheMap().values().iterator();
for (Iterator it = iter; it.hasNext(); ) {
CachedBuilderPage page = (CachedBuilderPage) it.next();
if (page == null) {
return null;
}
String cachedPageUri = page.getURIWithContextPath();
if (cachedPageUri == null) {
return null;
}
if (cachedPageUri.equals(pageUri)) {
return page.getPageKey();
}
}
return null;
}
public String getPageKeyByURI(String requestURI,ICDomain domain){
return getExistingPageKeyByURI(requestURI,domain);
}
/**
* Returns the key for the ICPage that the user has requested
*/
public String getCurrentIBPage(IWContext iwc) {
String theReturn = null;
String requestURI = iwc.getRequestURI();
if (!requestURI.startsWith(PAGES_PREFIX)) {
requestURI = iwc.getReferer();
if (requestURI == null) {
requestURI = iwc.getRequestURI();
} else {
int pagesIndex = requestURI.indexOf(PAGES_PREFIX);
requestURI = pagesIndex < 0 ? iwc.getRequestURI() : requestURI.substring(pagesIndex);
int paramsIndex = requestURI.indexOf("/?");
requestURI = paramsIndex > 0 ? requestURI.substring(0, paramsIndex) : requestURI;
}
}
if(IWMainApplication.useNewURLScheme){
//if (requestURI.startsWith(iwc.getIWMainApplication().getBuilderPagePrefixURI())) {
/*int indexOfPage = requestURI.indexOf("/pages/");
if (indexOfPage != -1) {
boolean pageISNumber = true;
String pageID = null;
try {
String subString = requestURI.substring(indexOfPage + 7);
int lastSlash = subString.indexOf("/");
if (lastSlash == -1) {
pageID = subString;
}
else {
pageID = subString.substring(0, lastSlash);
}
Integer.parseInt(pageID);
}
catch (NumberFormatException e) {
pageISNumber = false;
}
if (pageISNumber) {
return pageID;
}
}*/
try{
ICDomain domain = iwc.getDomain();
return getPageKeyByURI(requestURI, domain);
}
catch(NumberFormatException nfe){
//nothing printed out
}
catch(RuntimeException re){
//nothing printed out
//this can come from getPageKeyByURI() for old style systems with /servlet/IBMainSerlet uri
}
catch(Exception e){
e.printStackTrace();
}
}
// normal page check
if (iwc.isParameterSet(BuilderConstants.IB_PAGE_PARAMETER)) {
theReturn = iwc.getParameter(BuilderConstants.IB_PAGE_PARAMETER);
}
// session page check
else if (iwc.getSessionAttribute(SESSION_PAGE_KEY) != null) {
theReturn = (String) iwc.getSessionAttribute(SESSION_PAGE_KEY);
}
// otherwise use startpage
else {
theReturn = String.valueOf(getInstance().getStartPageIdByServerName(iwc,iwc.getServerName()));
}
if (theReturn == null) {
return Integer.toString(getCurrentDomain(iwc).getStartPageID());
}
return theReturn;
}
/**
* Sets the IBpage Id to use in the builder session.
* @param iwc
* @param pageKey
*/
public void setCurrentIBPage(IWContext iwc,String pageKey){
//This method only sets the session variant
iwc.setSessionAttribute(SESSION_PAGE_KEY,pageKey);
}
/**
* Sets the source and pageFormat for current page and stores to the datastore
* @param iwc IWContext to get the current page
* @param pageFormat
* @param stringSourceMarkup
*/
public boolean setPageSource(IWContext iwc,String pageFormat,String stringSourceMarkup){
String pageKey = getCurrentIBPage(iwc);
return setPageSource(pageKey,pageFormat,stringSourceMarkup);
}
/**
* Sets the source and pageFormat for the page with key pageKey and stores to the datastore
* @param pageKey
* @param pageFormat
* @param stringSourceMarkup
*/
public boolean setPageSource(String pageKey,String pageFormat,String stringSourceMarkup){
try{
if(pageFormat!=null && pageFormat.equals(PAGE_FORMAT_FACELET)||pageFormat.equals(PAGE_FORMAT_IBXML2)){
CachedBuilderPage page = getCachedBuilderPage(pageKey);
BuilderFaceletConverter converter = new BuilderFaceletConverter(page,pageFormat,stringSourceMarkup);
converter.convert();
stringSourceMarkup = converter.getConvertedMarkupString();
}
getPageCacher().storePage(pageKey,pageFormat,stringSourceMarkup);
return true;
}
catch(Exception e){
e.printStackTrace();
return false;
}
}
/**
* Gets the source code (IBXML,HTML) as a String for the current page
* @param iwc IWContext to get the current page
* @param pageFormat
* @param stringSourceMarkup
*/
public String getPageSource(IWContext iwc){
String pageKey = getCurrentIBPage(iwc);
return getPageSource(pageKey);
}
/**
* Gets the source code (IBXML,HTML) as a String for the page with key pageKey
* @param iwc IWContext to get the current page
* @param pageFormat
* @param stringSourceMarkup
*/
public String getPageSource(String pageKey){
return getCachedBuilderPage(pageKey).toString();
}
CachedBuilderPage getCurrentCachedBuilderPage(IWContext iwc) {
String key = getCurrentIBPage(iwc);
if (key != null) {
return (getCachedBuilderPage(key));
}
return null;
}
IBXMLPage getCurrentIBXMLPage(IWContext iwc) {
return (IBXMLPage)getCurrentCachedBuilderPage(iwc);
}
public ICDomain getCurrentDomain(){
IWApplicationContext iwac = IWApplicationContextFactory.getCurrentIWApplicationContext();
if (iwac == null) {
iwac = CoreUtil.getIWContext();
}
if (iwac == null) {
logger.warning("Using default IWApplicationContext to get current domain!");
iwac = IWMainApplication.getDefaultIWApplicationContext();
}
return getCurrentDomain(iwac);
}
public ICDomain getCurrentDomain(IWApplicationContext iwac) {
try {
return iwac.getDomain();
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
}
public ICDomain getCurrentDomainByServerName(String serverName){
IWApplicationContext iwac = IWMainApplication.getDefaultIWApplicationContext();
return getCurrentDomainByServerName(iwac,serverName);
}
public ICDomain getCurrentDomainByServerName(IWApplicationContext iwac,String serverName) {
try {
return iwac.getDomainByServerName(serverName);
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
}
/**
* Returns the real properties set for the property if the property is set
* with the specified keys Returns the selectedValues[] if nothing found
*/
public String[] getPropertyValues(IWMainApplication iwma, String pageKey, String instanceId, String propertyName, String[] selectedValues, boolean returnSelectedValueIfNothingFound) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return IBPropertyHandler.getInstance().getPropertyValues(iwma, xml, instanceId, propertyName, selectedValues, returnSelectedValueIfNothingFound);
}
public boolean removeProperty(IWMainApplication iwma, String pageKey, String instanceId, String propertyName, String[] values) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (getIBXMLWriter().removeProperty(iwma, xml, instanceId, propertyName, values)) {
xml.store();
return true;
}
return false;
}
public boolean removeModuleProperty(String pageKey, String moduleId, String propertyName) {
if (pageKey == null || moduleId == null || propertyName == null) {
return false;
}
IWMainApplication iwma = null;
IWContext iwc = CoreUtil.getIWContext();
if (iwc == null) {
iwma = IWMainApplication.getDefaultIWMainApplication();
}
else {
iwma = iwc.getIWMainApplication();
}
if (iwma == null) {
return false;
}
String[] values = getPropertyValues(iwma, pageKey, moduleId, propertyName, null, true);
if (values == null) {
return false;
}
boolean result = removeProperty(iwma, pageKey, moduleId, propertyName, values);
if (result) {
removeBlockObjectFromCache(iwc, BuilderConstants.SET_MODULE_PROPERTY_CACHE_KEY);
removeBlockObjectFromCache(iwc, BuilderConstants.EDIT_MODULE_WINDOW_CACHE_KEY);
}
return result;
}
/**
* Returns the first property if there is an array of properties set
*/
public String getProperty(String pageKey, String instanceId, String propertyName) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return getIBXMLWriter().getProperty(xml, instanceId, propertyName);
}
/**
* Returns true if properties changed, or error, else false
*/
public boolean setProperty(String pageKey, String instanceId, String propertyName, String propertyValue, IWMainApplication iwma) {
String[] values = {propertyValue};
return setProperty(pageKey, instanceId, propertyName, values, iwma);
}
/**
* Returns true if properties changed, or error, else false
*/
public boolean setProperty(IWContext iwc, String pageKey, String instanceId, String propertyName, List<AdvancedProperty> properties) {
if (iwc == null || pageKey == null || instanceId == null || propertyName == null || properties == null) {
return false;
}
String[] propertyValues = null;
boolean allowMultivalued = false;
try {
allowMultivalued = isPropertyMultivalued(propertyName, instanceId, iwc.getIWMainApplication(), pageKey);
} catch (Exception e) {
e.printStackTrace();
}
if (allowMultivalued) {
propertyValues = new String[properties.size()];
for (int i = 0; i < properties.size(); i++) {
propertyValues[i] = properties.get(i).getValue();
}
}
else {
propertyValues = modifyPropertyValuesRegardingParameterType(pageKey, instanceId, propertyName, properties);
}
if (propertyValues == null) {
// Can not set value(s), removing old value(s) if exist such
String values[] = getPropertyValues(iwc.getIWMainApplication(),pageKey, instanceId, propertyName, null, true);
if (removeProperty(iwc.getIWMainApplication(), pageKey, instanceId, propertyName, values)) {
return removeAllBlockObjectsFromCache(iwc);
}
}
if (setProperty(pageKey, instanceId, propertyName, propertyValues, iwc.getIWMainApplication())) {
removeBlockObjectFromCache(iwc, BuilderConstants.SET_MODULE_PROPERTY_CACHE_KEY);
removeBlockObjectFromCache(iwc, BuilderConstants.EDIT_MODULE_WINDOW_CACHE_KEY);
return true;
}
return false;
}
/**
* Returns true if properties changed, or error, else false
*/
public boolean setProperty(String pageKey, String instanceId, String propertyName, String[] propertyValues, IWMainApplication iwma) {
try {
boolean allowMultivalued = isPropertyMultivalued(propertyName, instanceId, iwma, pageKey);
IBXMLPage xml = getIBXMLPage(pageKey);
if (getIBXMLWriter().setProperty(iwma, xml, instanceId, propertyName, propertyValues, allowMultivalued)) {
xml.store();
return (true);
}
return (false);
}
catch (Exception e) {
e.printStackTrace(System.err);
return (false);
}
}
private String[] modifyPropertyValuesRegardingParameterType(String pageKey, String instanceId, String propertyName, List<AdvancedProperty> values) {
if (pageKey == null || instanceId == null || propertyName == null || values == null) {
return null;
}
if (values.size() == 0) {
return null;
}
String[] propertyValues = null;
try {
Class<?> clazz = Class.forName(getModuleClassName(pageKey, instanceId));
Method method = getMethodFinder().getMethod(propertyName, clazz);
Class<?>[] types = method.getParameterTypes();
if (types != null && types.length > 0) {
// TODO: add ability to register specific types handlers (e.g. handler for List etc)
// List
if(types[0].equals(List.class)) {
StringBuilder value = new StringBuilder();
for (int i = 0; i < values.size(); i++) {
value.append(values.get(i).getValue())
.append(ICBuilderConstants.BUILDER_MODULE_PROPERTY_VALUES_SEPARATOR);
}
return new String[] {value.toString()};
}
// PropertiesBean
if (types[0].equals(PropertiesBean.class)) {
GroupsChooserHelper helper = new GroupsChooserHelper();
return helper.getPropertyValue(values, true);
}
// CalendarPropertiesBean
if (types[0].equals(CalendarPropertiesBean.class)) {
CalendarsChooserHelper helper = new CalendarsChooserHelper();
return helper.getPropertyValue(values, false);
}
}
} catch (Exception e) {
e.printStackTrace();
}
propertyValues = new String[values.size()];
for (int i = 0; i < values.size(); i++) {
propertyValues[i] = values.get(i).getValue();
}
return propertyValues;
}
private MethodFinder getMethodFinder() {
return MethodFinder.getInstance();
}
/**
* Adds method with parameters to IBXMLPage
* @param pageKey
* @param moduleId
*/
public boolean addPropertyToModule(String pageKey, String moduleId, String propName, String propValue) {
if (pageKey == null || moduleId == null || propName == null || propValue == null) {
return false;
}
FacesContext f = FacesContext.getCurrentInstance();
IWContext iwc = IWContext.getIWContext(f);
if (iwc == null) {
return false;
}
StringBuffer values = new StringBuffer();
String currentValue = getProperty(pageKey, moduleId, propName);
if (currentValue != null) {
values.append(currentValue).append(IBXMLConstants.COMMA_STRING);
}
values.append(propValue);
return setProperty(pageKey, moduleId, propName, values.toString(), iwc.getIWMainApplication());
}
public boolean addPropertyToModules(String pageKey, List<String> moduleIds, String propName, String propValue) {
if (moduleIds == null) {
return false;
}
for (int i = 0; i < moduleIds.size(); i++) {
addPropertyToModule(pageKey, moduleIds.get(i), propName, propValue);
}
return true;
}
/**
* Returns true if properties changed, or error, else false
*/
public boolean isPropertySet(String pageKey, String instanceId, String propertyName, IWMainApplication iwma) {
try {
IBXMLPage xml = getIBXMLPage(pageKey);
return getIBXMLWriter().isPropertySet(iwma, xml, instanceId, propertyName);
}
catch (Exception e) {
e.printStackTrace(System.err);
return (false);
}
}
/**
* After deleting module, saves (if successfully deleted) IBXMLPage in other thread
* @param pageKey
* @param parentObjectInstanceID
* @param instanceId
* @param session
* @return
*/
public boolean deleteModule(String pageKey, String parentObjectInstanceID, String instanceId, IWSlideSession session) {
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
deleteBlock(instanceId, pageKey);
boolean result = getIBXMLWriter().deleteModule(page, parentObjectInstanceID, instanceId);
if (result) {
return savePage(page, session);
}
return result;
}
// add by Aron 20.sept 2001 01:49
public boolean deleteModule(String pageKey, String parentObjectInstanceID, String instanceId) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
deleteBlock(instanceId, pageKey);
if (getIBXMLWriter().deleteModule(xml, parentObjectInstanceID, instanceId)) {
xml.store();
return (true);
}
return (false);
}
private boolean deleteBlock(String instanceId, String pageKey) {
try {
ICObjectInstance instance = getIBXMLReader().getICObjectInstanceFromComponentId(instanceId, null, pageKey);
Object obj = ICObjectBusiness.getInstance().getNewObjectInstance(instance.getID());
if (obj != null) {
if (obj instanceof Builderaware) {
((Builderaware) obj).deleteBlock(Integer.parseInt(instanceId));
}
}
}
catch (Exception ex) {
ex.printStackTrace();
return false;
}
return true;
}
/**
* *
*/
public boolean copyModule(IWUserContext iwc, String pageKey, String instanceId) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
XMLElement element = xml.copyModule(instanceId);
if (element == null) {
return false;
}
XMLElement el = (XMLElement) element.clone();
iwc.setSessionAttribute(CLIPBOARD, el);
return (true);
}
/**
*
*/
public boolean pasteModuleIntoRegion(IWContext iwc, String pageKey, String regionId, String regionLabel) {
String instanceId = putModuleIntoRegion(iwc, pageKey, regionId, regionLabel, true);
return instanceId != null;
}
public String putModuleIntoRegion(IWContext iwc, String pageKey, String regionId, String regionLabel, boolean changeInstanceId) {
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
XMLElement element = (XMLElement) iwc.getSessionAttribute(CLIPBOARD);
if (element == null) {
return null;
}
XMLElement toPaste = (XMLElement) element.clone();
String instanceId = getIBXMLWriter().insertElementLast(page, pageKey, regionId, regionLabel == null ? regionId : regionLabel, toPaste, changeInstanceId);
if (instanceId == null) {
return null;
}
page.store();
return instanceId;
}
public String moveModule(String pageKey, String formerPageKey, String formerParentId, String instanceId, String parentId, IWContext iwc) {
// Page to put module into
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
if (page == null) {
return null;
}
// Page to take module from
IBXMLPage formerPageForModule = page;
if (!pageKey.equals(formerPageKey)) {
try {
formerPageForModule = getIBXMLPage(formerPageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
if (formerPageForModule == null) {
return null;
}
// Module's XML
XMLElement moduleXML = getIBXMLWriter().findModule(formerPageForModule, instanceId);
if (moduleXML == null) {
return null;
}
// Module container's XML
XMLElement parentXML = getIBXMLWriter().findModule(formerPageForModule, formerParentId);
if (parentXML == null) {
return null;
}
// Removing module from original page
boolean success = false;
try {
success = getIBXMLWriter().removeElement(parentXML, moduleXML, false);
} catch (Exception e) {
e.printStackTrace();
}
if (!success) {
return null;
}
// Storing page module was taken from (current page will be stored later)
if (!pageKey.equals(formerPageKey)) {
formerPageForModule.store();
}
// Putting module in new region (and page (if needed))
return putModuleIntoRegion(iwc, pageKey, parentId, null, false);
}
/**
* *
*/
public boolean pasteModuleAbove(IWUserContext iwc, String pageKey, String parentID, String objectID) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
XMLElement element = (XMLElement) iwc.getSessionAttribute(CLIPBOARD);
if (element == null) {
return (false);
}
XMLElement toPaste = (XMLElement) element.clone();
if (getIBXMLWriter().pasteElementAbove(xml, pageKey, parentID, objectID, toPaste)) {
xml.store();
return (true);
}
return (false);
}
public boolean pasteModuleBelow(IWUserContext iwc, String pageKey, String parentID, String objectID) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
XMLElement element = (XMLElement) iwc.getSessionAttribute(CLIPBOARD);
if (element == null) {
return (false);
}
XMLElement toPaste = (XMLElement) element.clone();
if (getIBXMLWriter().pasteElementBelow(xml, pageKey, parentID, objectID, toPaste)) {
xml.store();
return (true);
}
return (false);
}
/**
* Copies, cuts and then pastes the module as the last item in a region
* @param instanceId
* @param formerParentId
* @param pageKey
* @param regionId
* @param regionLabel
* @return
* @throws Exception
*/
public boolean moveModuleIntoRegion(String instanceId, String formerParentId, String pageKey, String regionId, String regionLabel) throws Exception {
boolean returner = false;
if("null".equals(regionLabel)){
regionLabel = null;
}
IBXMLPage page = getIBXMLPage(pageKey);
//find
XMLElement moduleXML = getIBXMLWriter().findModule(page,instanceId);
XMLElement parentXML = getIBXMLWriter().findModule(page,formerParentId);
XMLElement moduleXMLCopy = (XMLElement)moduleXML.clone();
if(moduleXML!=null && parentXML!=null){
//remove
try {
returner = getIBXMLWriter().removeElement(parentXML,moduleXML,false);
}
catch (Exception e) {
e.printStackTrace();
throw new Exception(e.getMessage());
}
if(returner){
returner = getIBXMLWriter().insertElementLastIntoParentOrRegion(page, pageKey, regionId, regionLabel,moduleXMLCopy);
}
if(!returner){
return false;
}
return page.store();
}
return returner;
}
/**
* Copies, cuts and then pastes the module below another module
* @param objectId
* @param pageKey
* @param formerParentId
* @param newParentId
* @param objectIdToPasteBelow
* @return
* @throws Exception
*/
public boolean moveModule(String instanceId, String pageKey, String formerParentId, String newParentId, String instanceIdToPasteBelow) throws Exception{
return moveModule(instanceId, pageKey, formerParentId, newParentId, instanceIdToPasteBelow, false);
}
/**
* Copies, cuts and then pastes the module above or below another module
* @param instanceId
* @param pageKey
* @param formerParentId
* @param newParentId
* @param neighbourInstanceId
* @param insertAbove
* @return
* @throws Exception
*/
public boolean moveModule(String instanceId, String pageKey, String formerParentId, String newParentId, String neighbourInstanceId, boolean insertAbove) throws Exception {
boolean result = false;
// Page
IBXMLPage page = getIBXMLPage(pageKey);
if (page == null) {
return false;
}
// Current XMLElement
XMLElement moduleXML = getIBXMLWriter().findModule(page, instanceId);
if (moduleXML == null) {
return false;
}
// Parent container
XMLElement parentXML = getIBXMLWriter().findModule(page, formerParentId);
if (parentXML == null) {
return false;
}
// Copy of current element
XMLElement moduleXMLCopy = (XMLElement) moduleXML.clone();
// Removes element from current region
result = removeElement(parentXML, moduleXML, false);
if (!result) {
// Module is in a region of some (parent) module
result = removeElement(getIBXMLWriter().findRegion(page, null,
new StringBuilder(IBXMLConstants.REGION_OF_MODULE_STRING).append(formerParentId).toString()), moduleXML, false);
}
// Finds real region
if (result) {
XMLElement newRegion = getIBXMLWriter().findRegion(page, newParentId, newParentId);
if (newRegion == null) {
newParentId = new StringBuilder(IBXMLConstants.REGION_OF_MODULE_STRING).append(newParentId).toString();
}
else if (!IBXMLConstants.REGION_STRING.equals(newRegion.getName())) {
newParentId = new StringBuilder(IBXMLConstants.REGION_OF_MODULE_STRING).append(newParentId).toString();
}
}
else {
return false;
}
// Inserts to the needed position
if (StringUtil.isEmpty(neighbourInstanceId)) {
result = getIBXMLWriter().insertElementLastIntoParentOrRegion(page, pageKey, newParentId, newParentId, moduleXMLCopy);
}
else if (insertAbove) {
result = getIBXMLWriter().insertElementAbove(page, newParentId, moduleXMLCopy, neighbourInstanceId);
}
else {
result = getIBXMLWriter().insertElementBelow(page, newParentId, moduleXMLCopy, neighbourInstanceId);
}
if (!result) {
return false;
}
return page.store();
}
private boolean removeElement(XMLElement container, XMLElement elementToRemove, boolean removeInstanceId) {
if (container == null || elementToRemove == null) {
return false;
}
try {
return getIBXMLWriter().removeElement(container, elementToRemove, removeInstanceId);
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
public boolean lockRegion(String pageKey, String parentObjectInstanceID) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (getIBXMLWriter().lockRegion(xml, parentObjectInstanceID)) {
xml.store();
if (parentObjectInstanceID.equals("-1")) {
if (xml.getType().equals(CachedBuilderPage.TYPE_TEMPLATE)) {
List extend = xml.getUsingTemplate();
if (extend != null) {
Iterator i = extend.iterator();
while (i.hasNext()) {
lockRegion((String) i.next(), parentObjectInstanceID);
}
}
}
}
return true;
}
return (false);
}
public boolean unlockRegion(String pageKey, String parentObjectInstanceID, String label) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (getIBXMLWriter().unlockRegion(xml, parentObjectInstanceID)) {
xml.store();
if (parentObjectInstanceID.equals("-1")) {
if (xml.getType().equals(CachedBuilderPage.TYPE_TEMPLATE)) {
List extend = xml.getUsingTemplate();
if (extend != null) {
Iterator i = extend.iterator();
while (i.hasNext()) {
String child = (String) i.next();
unlockRegion(child, parentObjectInstanceID, null);
}
}
}
}
labelRegion(pageKey, parentObjectInstanceID, label);
return true;
}
return (false);
}
public String addNewModule(String pageKey, String parentObjectInstanceID, String regionId, int newICObjectID, String label, IWSlideSession session) {
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
String id = getIBXMLWriter().addNewModule(page, pageKey, parentObjectInstanceID, regionId, newICObjectID, label);
if (id == null) {
return null;
}
if (savePage(page, session)) {
return id;
}
return null;
}
/**
* *
*/
public boolean addNewModule(String pageKey, String parentObjectInstanceID, int newICObjectID, String label) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
//TODO add handling for generic UIComponent adding
String id = getIBXMLWriter().addNewModule(xml, pageKey, parentObjectInstanceID, newICObjectID, label);
if (id == null) {
return false;
}
xml.store();
return true;
}
/**
* After inserting new module IBXMLPage is saved (if successfully inserted module) in other thread
* @param pageKey
* @param parentObjectInstanceID
* @param newICObjectID
* @param label
* @param slideSession
* @return
*/
public String addNewModule(String pageKey, String parentObjectInstanceID, int newICObjectID, String label, IWSlideSession slideSession) {
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
if (slideSession != null) {
// Will check if can use thread
XMLElement region = null;
try {
region = getIBXMLWriter().findRegion(page, label, null);
} catch(Exception e) {
e.printStackTrace();
}
boolean useThread = true;
if (region == null) {
useThread = false;
}
else {
List children = region.getChildren();
if (children == null || children.size() == 0) {
useThread = false;
}
}
if (!useThread) {
slideSession = null;
}
}
String id = getIBXMLWriter().addNewModule(page, pageKey, parentObjectInstanceID, newICObjectID, label);
if (id == null) {
return null;
}
if (savePage(page, slideSession)) {
return id;
}
return null;
}
protected boolean setPageSourceAsString(IBXMLPage page) {
XMLDocument doc = page.getXMLDocument();
if (doc == null) {
return false;
}
Object o = doc.getDocument();
if (o instanceof Document) {
Document d = (Document) o;
XMLOutputter out = new XMLOutputter();
out.setFormat(Format.getPrettyFormat());
try {
page.setSourceFromString(out.outputString(d));
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
return false;
}
private boolean savePage(IBXMLPage page, IWSlideSession session) {
if (page == null) {
return false;
}
if (session == null) {
return page.store();
}
boolean existPageSource = true;
if (page.getSourceAsString() == null) {
existPageSource = setPageSourceAsString(page);
}
if (existPageSource) {
Thread saver = new Thread(new BuilderLogicWorker(page, session));
saver.start();
}
else {
return page.store();
}
return true;
}
public boolean addRegion(String pageKey, String label, String parentId, boolean storePage) {
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (page == null) {
return false;
}
if (getIBXMLWriter().addRegionToRootElement(page, label, parentId)) {
if (storePage) {
page.store();
}
return true;
}
return false;
}
/**
* *
*/
public boolean addNewModule(String pageKey, String parentObjectInstanceID, ICObject newObjectType, String label) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
String id = getIBXMLWriter().addNewModule(xml, pageKey, parentObjectInstanceID, newObjectType, label);
if (id == null) {
return false;
}
xml.store();
return true;
}
public Class<?> getObjectClass(int icObjectInstanceID) {
try {
ICObjectInstance instance = ((ICObjectInstanceHome) com.idega.data.IDOLookup.getHomeLegacy(ICObjectInstance.class)).findByPrimaryKeyLegacy(icObjectInstanceID);
return instance.getObject().getObjectClass();
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
public boolean isPropertyMultivalued(String propertyName, String instanceId, IWMainApplication iwma, String pageKey) throws Exception {
int objectId = -1;
try {
objectId = Integer.valueOf(instanceId).intValue();
} catch (NumberFormatException e) {
objectId = getIBXMLReader().getICObjectInstanceIdFromComponentId(instanceId, null, pageKey);
}
if (objectId == -1) {
return false;
}
try {
Class c = null;
IWBundle iwb = null;
if ("-1".equals(instanceId)) {
c = com.idega.presentation.Page.class;
iwb = iwma.getBundle(PresentationObject.CORE_IW_BUNDLE_IDENTIFIER);
}
else {
ICObjectInstance instance = ((com.idega.core.component.data.ICObjectInstanceHome) com.idega.data.IDOLookup.getHomeLegacy(ICObjectInstance.class)).findByPrimaryKeyLegacy(objectId);
c = instance.getObject().getObjectClass();
iwb = instance.getObject().getBundle(iwma);
}
//IWPropertyList complist = iwb.getComponentList();
IWPropertyList component = iwb.getComponentPropertyList(c.getName());
IWPropertyList methodlist = component.getPropertyList(IBPropertyHandler.METHODS_KEY);
if (methodlist == null) {
return (false);
}
IWPropertyList method = methodlist.getPropertyList(propertyName);
if (method == null) {
return (false);
}
IWProperty prop = method.getIWProperty(IBPropertyHandler.METHOD_PROPERTY_ALLOW_MULTIVALUED);
if (prop != null) {
boolean value = prop.getBooleanValue();
return value;
}
return false;
}
catch (Exception e) {
//e.printStackTrace(System.err);
return false;
}
}
/**
* *
*/
public PresentationObject getPasteIcon(String parentKey,String regionLabel, IWContext iwc) {
Image pasteImage = getBuilderBundle().getImage("paste.gif", "Paste component");
Link link = new Link(pasteImage);
link.setStyleClass("regionButton");
link.setWindowToOpen(IBPasteModuleWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, ACTION_PASTE);
link.addParameter(IB_PARENT_PARAMETER, parentKey);
if(regionLabel!=null){
link.addParameter(IB_LABEL_PARAMETER , regionLabel);
}
return (link);
}
/**
* *
*/
public boolean labelRegion(String pageKey, String parentObjectInstanceID, String label) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (getIBXMLWriter().labelRegion(xml, parentObjectInstanceID, label)) {
xml.store();
return true;
}
return (false);
}
public String getCurrentIBPageURL(IWContext iwc) {
String sPageId = getCurrentIBPage(iwc);
int pageId = Integer.parseInt(sPageId);
return getIBPageURL(iwc,pageId);
}
/**
* *
*/
public String getIBPageURL(IWApplicationContext iwc, int ib_page_id) {
String pageKey = Integer.toString(ib_page_id);
return getIBPageURL(iwc, pageKey, false);
}
public String getIBPageURL(IWApplicationContext iwc, String pageKey, boolean checkIfDeleted) {
if (IWMainApplication.useNewURLScheme) {
CachedBuilderPage page = getPageCacher().getCachedBuilderPage(pageKey);
if (page == null) {
return null;
}
if (checkIfDeleted && page.getICPage().getDeleted()) {
return null;
}
String pageUri = page.getPageUri();
if (pageUri != null) {
String returnUrl = iwc.getIWMainApplication().getBuilderPagePrefixURI()+pageUri;
//clean out the potential double slash:
return StringHandler.removeMultipleSlashes(returnUrl);
}
return iwc.getIWMainApplication().getBuilderPagePrefixURI()+pageKey+"/";
}
StringBuffer url = new StringBuffer();
url.append(iwc.getIWMainApplication().getBuilderPagePrefixURI());
int ib_page_id = Integer.parseInt(pageKey);
if (ib_page_id > 0) {
url.append("?");
url.append(BuilderConstants.IB_PAGE_PARAMETER);
url.append("=");
url.append(ib_page_id);
}
return url.toString();
}
/**
* *
*/
public String getIFrameContentURL(IWContext iwc, int ICObjectInstanceId) {
String src = iwc.getIWMainApplication().getIFrameContentURI() + "?" + ICBuilderConstants.IC_OBJECT_INSTANCE_ID_PARAMETER + "=" + ICObjectInstanceId;
String query = iwc.getQueryString();
if (query != null && !query.equals("")) {
src += ("&" + query);
}
return src;
}
/**
* Changes the name of the current page.
*
* @param name
* The new name for the page
* @param iwc
* The IdegeWeb Context object
*/
public void changeName(String name, IWContext iwc) {
CachedBuilderPage xml = getCurrentCachedBuilderPage(iwc);
if (xml != null) {
if (!xml.getName().equals(name)) {
xml.setName(name);
Map<Integer, PageTreeNode> tree = PageTreeNode.getTree(iwc);
if (tree != null) {
String currentId = getCurrentIBPage(iwc);
if (currentId != null) {
PageTreeNode node = tree.get(Integer.valueOf(currentId));
if (node != null) {
node.setNodeName(name);
}
}
}
}
}
}
/**
* Changes the template id for the current page.
*
* @param newTemplateId
* The new template id for the current page.
* @param iwc
* The IdegeWeb Context object @todo make this work for templates!
*/
public void changeTemplateId(String newTemplateId, IWContext iwc) {
IBXMLPage xml = getCurrentIBXMLPage(iwc);
if (xml != null) {
xml.changeTemplateId(newTemplateId);
}
}
/**
* Changes the template id for the IBXMLPage.
*
* @parama pageKey
* IBPage id
*
* @param newTemplateId
* The new template id for the current page.
*/
public void setTemplateId(String pageKey, String newTemplateId) {
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
return;
}
if (xml == null) {
return;
}
xml.setTemplateId(newTemplateId);
}
/**
* *
*/
public void startBuilderSession(IWUserContext iwuc) {
iwuc.setSessionAttribute(IB_APPLICATION_RUNNING_SESSION, Boolean.TRUE);
}
/**
* *
*/
public void endBuilderSession(IWUserContext iwuc) {
iwuc.removeSessionAttribute(IB_APPLICATION_RUNNING_SESSION);
}
/**
* *
*/
public boolean isBuilderApplicationRunning(IWUserContext iwuc) {
return !(iwuc.getSessionAttribute(IB_APPLICATION_RUNNING_SESSION) == null);
}
/**
* *
*/
public PresentationObject getIFrameContent(int instanceId, IWContext iwc) {
PresentationObject obj = EventLogic.getPopulatedObjectInstance(instanceId, iwc);
PresentationObject iframeContent = null;
if (obj instanceof IFrameContainer && obj != null) {
iframeContent = ((IFrameContainer) obj).getIFrameContent();
}
return iframeContent;
}
public void changeDPTCrawlableLinkContainerPageIds(int moduleId, String currentPageID, String newLinkedPageIds) {
IBXMLPage page = null;
try {
page = getIBXMLPage(currentPageID);
} catch (Exception e) {
e.printStackTrace();
return;
}
XMLElement element = new XMLElement(IBXMLConstants.CHANGE_ROOT_PAGE);
XMLAttribute id = new XMLAttribute(IBXMLConstants.LINK_ID_STRING, Integer.toString(moduleId));
XMLAttribute newPageLink = new XMLAttribute(IBXMLConstants.LINK_TO, newLinkedPageIds);
element.setAttribute(id);
element.setAttribute(newPageLink);
getIBXMLWriter().addNewElement(page, "-1", element);
page.store();
getPageCacher().flagPageInvalid(currentPageID);
}
public void changeDPTCrawlableLinkedPageId(int moduleId, String currentPageID, String newLinkedPageId) {
IBXMLPage page = null;
try {
page = getIBXMLPage(currentPageID);
} catch (Exception e) {
e.printStackTrace();
return;
}
XMLElement element = new XMLElement(IBXMLConstants.CHANGE_PAGE_LINK);
XMLAttribute id = new XMLAttribute(IBXMLConstants.LINK_ID_STRING, Integer.toString(moduleId));
XMLAttribute newPageLink = new XMLAttribute(IBXMLConstants.LINK_TO, newLinkedPageId);
element.setAttribute(id);
element.setAttribute(newPageLink);
getIBXMLWriter().addNewElement(page, "-1", element);
page.store();
getPageCacher().flagPageInvalid(currentPageID);
}
/**
* *
*/
public int getStartPageId(IWApplicationContext iwac) {
ICDomain domain = getCurrentDomain(iwac);
return domain.getStartPageID();
}
/**
* *
*/
public String getStartPageKey(IWApplicationContext iwac) {
int id = getStartPageId(iwac);
return Integer.toString(id);
}
/**
* *
*/
public int getStartPageIdByServerName(String serverName) {
ICDomain domain = getCurrentDomainByServerName(serverName);
return domain.getStartPageID();
}
/**
* *
*/
public int getStartPageIdByServerName(IWApplicationContext iwac,String serverName) {
ICDomain domain = getCurrentDomainByServerName(iwac,serverName);
return domain.getStartPageID();
}
/**
* *
*/
public String getCurrentPageHtml(IWContext iwc) {
String ibpage = getCurrentIBPage(iwc);
ICDomain domain = getCurrentDomain(iwc);
String sUrl = domain.getURL();
//cut the last '/' away to avoid double '/'
if(sUrl!=null){
if(sUrl.endsWith("/")){
sUrl = sUrl.substring(0,sUrl.length()-1);
}
}
StringBuffer url = new StringBuffer(sUrl);
// url.append(IWMainApplication.BUILDER_SERVLET_URL);
// url.append(iwc.getApplication().getBuilderServletURI());
// url.append("?");
// url.append(IB_PAGE_PARAMETER);
// url.append("=");
url.append(this.getIBPageURL(iwc, Integer.parseInt(ibpage)));
if (url.toString().indexOf("http") == -1) {
url.insert(0, "http://");
}
String html = FileUtil.getStringFromURL(url.toString());
return (html);
}
/**
* Invalidates cache for all pages and the cached page tree
*/
public void clearAllCachedPages() {
clearCaches(IWMainApplication.getDefaultIWApplicationContext());
}
/**
* Clears all caches
*/
public void clearAllCaches() {
IWApplicationContext iwac = IWMainApplication.getDefaultIWApplicationContext();
clearCaches(iwac);
PageTreeNode.clearTree(iwac);
}
private void clearCaches(IWApplicationContext iwac) {
logger.info("Clearing all DomainTree Cache");
DomainTree.clearCache(iwac);
getPageCacher().flagAllPagesInvalid();
}
/**
* Invalidates all caches for a page with key pageKey
* @param pageKey
*/
public void invalidatePage(String pageKey){
getPageCacher().flagPageInvalid(pageKey);
}
private PageCacher pageCacher;
/**
* Return the singleton instance of PageCacher
* @return
*/
public PageCacher getPageCacher(){
if(this.pageCacher==null){
setPageCacher(new PageCacher());
}
return this.pageCacher;
}
public void setPageCacher(PageCacher pageCacherInstance){
this.pageCacher=pageCacherInstance;
}
private IBPageHelper ibPageHelper;
/**
* Return the singleton instance of IBPageHelper
* @return
*/
public synchronized IBPageHelper getIBPageHelper(){
if(this.ibPageHelper==null){
setIBPageHelper(new IBPageHelper());
}
return this.ibPageHelper;
}
public void setIBPageHelper(IBPageHelper ibPageHelper){
this.ibPageHelper=ibPageHelper;
}
private IBXMLWriter xmlWriter;
public IBXMLWriter getIBXMLWriter(){
if(this.xmlWriter==null){
setIBXMLWriter(new IBXMLWriter());
}
return this.xmlWriter;
}
public void setIBXMLWriter(IBXMLWriter writer){
this.xmlWriter=writer;
}
private IBXMLReader xmlReader;
public IBXMLReader getIBXMLReader(){
if(this.xmlReader==null){
setIBXMLReader(new IBXMLReader());
}
return this.xmlReader;
}
public void setIBXMLReader(IBXMLReader reader){
this.xmlReader=reader;
}
/**
* Return an array of the document formats that the Builder supports.
* ('IBXML','HTML','JSP_1_2')
* @return
*/
public String[] getPageFormatsSupported(){
return this.pageFormats;
}
/**
* <p>
* Returns a map with pageFormat as key and descripton as value
* </p>
* @return
*/
public Map<String, String> getPageFormatsSupportedAndDescription(){
Map<String, String> map = new HashMap<String, String>();
map.put(PAGE_FORMAT_IBXML,"Builder (IBXML)");
map.put(PAGE_FORMAT_IBXML2,"Builder Facelet (IBXML2)");
map.put(PAGE_FORMAT_HTML,"HTML");
map.put(PAGE_FORMAT_JSP_1_2,"JSP 1.2");
map.put(PAGE_FORMAT_FACELET,"Facelet");
return map;
}
/**
* gets the default page format:
* @return
*/
public String getDefaultPageFormat(){
return PAGE_FORMAT_IBXML;
}
/**
*
*/
private Layer addButtonsLayer(Layer parent, String uri, String label, IWResourceBundle iwrb, String labelMarkerContainerId) {
Layer buttons = new Layer();
buttons.setStyleClass("builderButtons");
parent.addAtBeginning(buttons);
// Add module button
Layer addModuleContainer = new Layer();
addModuleContainer.setStyleClass("builderButton");
StringBuffer title = new StringBuffer(iwrb.getLocalizedString("create_simple_template.Region", "Region"));
if (label != null) {
title.append(": ").append(label);
}
title.append(" :: ").append(iwrb.getLocalizedString(BuilderConstants.ADD_MODULE_TO_REGION_LOCALIZATION_KEY,
BuilderConstants.ADD_MODULE_TO_REGION_LOCALIZATION_VALUE));
// Link for MOOdalBox
Link link = new Link(new Span(new Text(iwrb.getLocalizedString("add", "Add"))), "javascript:void(0);");
link.setToolTip(title.toString());
link.setOnClick(new StringBuilder("openSelectAndAddModuleWindow('").append(labelMarkerContainerId).append("', '").append(uri).append("');").toString());
link.setStyleClass("addModuleLinkStyleClass");
addModuleContainer.add(link);
buttons.add(addModuleContainer);
// Add article button
Layer addArticleContainer = new Layer();
addArticleContainer.setStyleClass("builderButton");
title = new StringBuffer(iwrb.getLocalizedString("article_module", "Article")).append(" :: ");
title.append(iwrb.getLocalizedString("add_article_module", "Add article module"));
title.append(getLabelToRegion(iwrb, label));
Span addArticle = new Span(new Text(iwrb.getLocalizedString("text", "Text")));
addArticleContainer.setTitle(title.toString());
addArticleContainer.setStyleClass("add_article_module_to_region_image");
ICObject article = null;
try {
article = getICObjectHome().findByClassName(CoreConstants.getArticleItemViewerClass().getName());
} catch (Exception e) {
e.printStackTrace();
}
if (article != null) {
addArticle.setMarkupAttribute("icobjectid", article.getID());
addArticle.setMarkupAttribute("icobjectclass", article.getClassName());
addArticle.setMarkupAttribute("regioncontainerid", labelMarkerContainerId);
}
addArticleContainer.add(addArticle);
buttons.add(addArticleContainer);
// Paste module button
Layer pasteButtonContainer = new Layer();
pasteButtonContainer.setStyleClass("builderButton");
title = new StringBuffer(iwrb.getLocalizedString("paste", "Paste")).append(" :: ");
title.append(iwrb.getLocalizedString("paste_module", "Paste module"));
title.append(getLabelToRegion(iwrb, label));
/*Image pasteImage = getBuilderBundle().getImage("paste_16.png", title.toString(), 16, 16);
pasteImage.setStyleClass(BuilderConstants.IMAGE_WITH_TOOLTIPS_STYLE_CLASS);*/
StringBuffer pasteAction = new StringBuffer("pasteCopiedModule('").append(pasteButtonContainer.getId()).append("');");
//pasteImage.setOnClick(pasteAction.toString());
Span paste = new Span(new Text(iwrb.getLocalizedString("paste", "Paste")));
pasteButtonContainer.setTitle(title.toString());
pasteButtonContainer.setMarkupAttributeMultivalued("onclick", pasteAction.toString());
//pasteButtonContainer.add(pasteImage);
pasteButtonContainer.add(paste);
pasteButtonContainer.setStyleClass("pasteModuleIconContainer");
buttons.add(pasteButtonContainer);
return buttons;
}
private String getLabelToRegion(IWResourceBundle iwrb, String regionLabel) {
if (regionLabel == null) {
return CoreConstants.EMPTY;
}
return new StringBuilder(CoreConstants.SPACE).append(iwrb.getLocalizedString("to", "to")).append(CoreConstants.SPACE).append(regionLabel).toString();
}
/**
*
*/
public PresentationObject getLockedIcon(String parentKey, IWContext iwc, String label){
IWBundle iwb = getBuilderBundle();
IWResourceBundle iwrb = iwb.getResourceBundle(iwc);
Layer layer = new Layer();
layer.setStyleClass("builderButton");
layer.setStyleClass("lockedRegion");
Link link = new Link(new Span(new Text(iwrb.getLocalizedString("unlock_region", "Unlock region"))));
link.setWindowToOpen(IBLockRegionWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_UNLOCK_REGION);
link.addParameter(BuilderLogic.IB_PARENT_PARAMETER, parentKey);
link.addParameter(BuilderLogic.IB_LABEL_PARAMETER, label);
if(label!=null){
link.setToolTip(label);
}
layer.add(link);
return layer;
}
/**
*
*/
public PresentationObject getUnlockedIcon(String parentKey, IWContext iwc){
IWBundle iwb = getBuilderBundle();
IWResourceBundle iwrb = iwb.getResourceBundle(iwc);
Layer layer = new Layer();
layer.setStyleClass("builderButton");
layer.setStyleClass("unlockedRegion");
Link link = new Link(new Span(new Text(iwrb.getLocalizedString("lock_region", "Lock region"))));
link.setWindowToOpen(IBLockRegionWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_LOCK_REGION);
link.addParameter(BuilderLogic.IB_PARENT_PARAMETER, parentKey);
layer.add(link);
return layer;
}
/**
*
*/
public PresentationObject getLabelIcon(String parentKey, IWContext iwc, String label){
IWBundle iwb = getBuilderBundle();
IWResourceBundle iwrb = iwb.getResourceBundle(iwc);
Layer layer = new Layer();
layer.setStyleClass("builderButton");
layer.setStyleClass("labelButton");
Link link = new Link(new Span(new Text(iwrb.getLocalizedString("set_label", "Put label on region"))));
link.setWindowToOpen(IBAddRegionLabelWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_LABEL);
link.addParameter(BuilderLogic.IB_PARENT_PARAMETER, parentKey);
link.addParameter(BuilderLogic.IB_LABEL_PARAMETER, label);
if(label!=null){
link.setToolTip(label);
}
layer.add(link);
return (layer);
}
public PresentationObject getCutIcon(String key, String parentKey, IWContext iwc){
Image cutImage = getBuilderBundle().getImage("cut_16.gif", "Cut component",16,16);
Link link = new Link(cutImage);
link.setStyleClass("moduleButton");
link.setWindowToOpen(IBCutModuleWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_COPY);
link.addParameter(BuilderLogic.IB_PARENT_PARAMETER, parentKey);
link.addParameter(ICBuilderConstants.IC_OBJECT_INSTANCE_ID_PARAMETER, key);
return link;
}
/**
*
*/
public PresentationObject getCopyIcon(String key, String parentKey, IWContext iwc){
Image copyImage = getBuilderBundle().getImage("copy_16.gif", "Copy component",16,16);
//copyImage.setAttribute("style","z-index: 0;");
Link link = new Link(copyImage);
link.setStyleClass("moduleButton");
link.setWindowToOpen(IBCopyModuleWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_COPY);
link.addParameter(BuilderLogic.IB_PARENT_PARAMETER, parentKey);
link.addParameter(ICBuilderConstants.IC_OBJECT_INSTANCE_ID_PARAMETER, key);
return (link);
}
public PresentationObject getDeleteIcon(String key, String parentKey, IWContext iwc){
Image deleteImage = getBuilderBundle().getImage("del_16.gif", "Delete component",16,16);
Link link = new Link(deleteImage);
link.setStyleClass("moduleButton");
link.setWindowToOpen(IBDeleteModuleWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_DELETE);
link.addParameter(BuilderLogic.IB_PARENT_PARAMETER, parentKey);
link.addParameter(ICBuilderConstants.IC_OBJECT_INSTANCE_ID_PARAMETER, key);
return link;
}
public PresentationObject getPermissionIcon(String key, IWContext iwc){
Image editImage = getBuilderBundle().getImage("lock_16.gif", "Set permissions",16,16);
Link link = new Link(editImage);
link.setStyleClass("moduleButton");
link.setWindowToOpen(IBPermissionWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_PERMISSION);
link.addParameter(IBPermissionWindow._PARAMETERSTRING_IDENTIFIER, key);
link.addParameter(
IBPermissionWindow._PARAMETERSTRING_PERMISSION_CATEGORY,
AccessController.CATEGORY_OBJECT_INSTANCE);
return link;
}
public PresentationObject getEditIcon(String key, IWContext iwc){
Image editImage = getBuilderBundle().getImage("prefs_16.gif", "Properties",16,16);
Link link = new Link(editImage);
link.setStyleClass("moduleButton");
link.setWindowToOpen(IBPropertiesWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, ICBuilderConstants.ACTION_EDIT);
link.addParameter(ICBuilderConstants.IC_OBJECT_INSTANCE_ID_PARAMETER, key);
return link;
}
/**
*
*/
public PresentationObject getPasteAboveIcon(String key, String parentKey, IWContext iwc)
{
Image pasteImage = getBuilderBundle().getImage("paste_16.gif", "Paste above component",16,16);
//copyImage.setAttribute("style","z-index: 0;");
Link link = new Link(pasteImage);
link.setStyleClass("moduleButton");
link.setWindowToOpen(IBPasteModuleWindow.class);
link.addParameter(BuilderConstants.IB_PAGE_PARAMETER, getCurrentIBPage(iwc));
link.addParameter(ICBuilderConstants.IB_CONTROL_PARAMETER, BuilderLogic.ACTION_PASTE_ABOVE);
link.addParameter(BuilderLogic.IB_PARENT_PARAMETER, parentKey);
link.addParameter(ICBuilderConstants.IC_OBJECT_INSTANCE_ID_PARAMETER, key);
return (link);
}
public ViewNode getBuilderPageRootViewNode(){
String BUILDER_PAGE_VIEW_ID="pages";
return ViewManager.getInstance(IWMainApplication.getDefaultIWMainApplication()).getApplicationRoot().getChild(BUILDER_PAGE_VIEW_ID);
}
public String getInstanceId(UIComponent object) {
String instanceId = null;
if (object instanceof PresentationObject) {
PresentationObject po = (PresentationObject) object;
instanceId = po.getXmlId();
}
if (instanceId == null) {
// set from the xml
instanceId = object.getId();
}
return instanceId;
}
/**
* Gets a copy of a UIComponent by its instanceId (component.getId()) if it is found in the current pages ibxml
* @param component
* @return A reset copy of the component from ibxml
*/
public UIComponent getCopyOfUIComponentFromIBXML(UIComponent component) {
String instanceId = getInstanceId(component);
UIComponent newComponent = null;
try {
newComponent = component.getClass().newInstance();
newComponent.setId(instanceId);
PropertyCache.getInstance().setAllCachedPropertiesOnInstance(instanceId, newComponent);
List<UIComponent> childrenList = component.getChildren();
for (UIComponent childComponent: childrenList) {
UIComponent newChildComponent = getCopyOfUIComponentFromIBXML(childComponent);
if (newChildComponent != null) {
newComponent.getChildren().add(newChildComponent);
}
}
}
catch (InstantiationException ex) {
ex.printStackTrace();
return null;
}
catch (IllegalAccessException ex) {
ex.printStackTrace();
return null;
}
return newComponent;
}
/**
* @param containerId
* @return
*/
public String getDraggableScript(String containerId, String handleId) {
// return " new Draggable('"+containerId+"',{handle:'"+handleAndMenuLayer.getID()+"',revert:true});";
return " new Draggable('"+containerId+"',{handle:'"+handleId+"',revert:true, " +
"endeffect: function(element, top_offset, left_offset) { " +
//" new Effect.Opacity(element, {duration:0.2, from:0.7, to:1.0}); " +
" new Effect.Pulsate(element,{duration:1.5});" +
"}});";
}
public String getModuleToModuleDroppableScript(String contentLayerId, String droppableId, String acceptableStyleClasses, String hoverStyleClass, String webServiceURI) {
//TODO make an external script (as much as possible)
return "Droppables.add('"+droppableId+"',{accept:['"+acceptableStyleClasses+"'],hoverclass:'"+hoverStyleClass+"'," +
"onDrop: " +
"function(element) { \n" +
" var elementContainerId = element.id; \n" +
" var dropTargetId = '"+contentLayerId+"'; \n" +
" var dropTarget = $(dropTargetId); \n" +
" var elementInstanceId = $('instanceId_'+elementContainerId).value; \n" +
" var dropTargetInstanceId = $('instanceId_'+dropTargetId).value \n;" +
" var currentPageKey = $('pageId_'+dropTargetId).value; \n" +
" var formerParentId = $('parentId_'+elementContainerId).value; \n" +
" var newParentId = $('parentId_'+dropTargetId).value; \n" +
" var webServiceURI = '"+webServiceURI+"'\n"+
" var query = 'method=moveModule&objectId='+elementInstanceId+'&pageKey='+currentPageKey+'&formerParentId='+formerParentId+'&newParentId='+newParentId+'&objectIdToPasteBelow='+dropTargetInstanceId; \n" +
//" alert(query);" +
" new Ajax.Request(webServiceURI+'?'+query, { \n" +
" onComplete: function(request) { \n" +
" if(request.responseText.indexOf('iwbuilder-ok')>=0){ \n" +
" $('parentId_'+elementContainerId).value = newParentId; " +
" dropTarget.parentNode.insertBefore(element,dropTarget); \n" +
" element.parentNode.insertBefore(dropTarget,element); \n" +
" $('parentId_'+elementContainerId).value = newParentId; \n" +
" }else { alert(request.responseText); } \n" +
" }, method: 'GET',asynchronous: true})" +
//OLD WAY that did not work for droppables within droppables after one drag.
// " var elementHandleId = 'handle_'+elementContainerId;" +
// " var scriptLayer = $('script_'+elementContainerId);" +
// " var scriptLayerId = scriptLayer.id;" +
//Copy the moduleContainer layer
//" new Insertion['After']($('"+contentLayerId+"'), '<div class=moduleContainer id='+elementContainerId+' >'+element.innerHTML+' </div>');" +
//get rid of the old
//" Element.remove(element); " +
//" element = null;" +
//Copy the script layer also!
//" new Insertion['After']($(elementContainerId), '<div class=script id='+scriptLayerId+' >'+scriptLayer.innerHTML+' </div>');" +
"}});";
}
public String getModuleToRegionDroppableScript(String regionMarkerId, String pageKey, String regionId, String regionLabel, String acceptableStyleClasses, String hoverStyleClass, String webServiceURI) {
return "Droppables.add('"+regionMarkerId+"',{accept:['"+acceptableStyleClasses+"'],hoverclass:'"+hoverStyleClass+"'," +
"onDrop: " +
"function(element) { \n" +
" var elementContainerId = element.id; \n" +
" var dropTargetId = '"+regionMarkerId+"'; \n" +
" var dropTarget = $(dropTargetId); \n" +
" var elementInstanceId = $('instanceId_'+elementContainerId).value; \n" +
" var currentPageKey = '"+pageKey+"' \n" +
" var formerParentId = $('parentId_'+elementContainerId).value; \n" +
" var regionId = '"+regionId+"'; \n" +
" var regionLabel = '"+regionLabel+"'\n" +
" var webServiceURI = '"+webServiceURI+"'\n"+
" var query = 'method=moveModuleIntoRegion&instanceId='+elementInstanceId+'&formerParentId='+formerParentId+'&pageKey='+currentPageKey+'®ionId='+regionId+'®ionLabel='+regionLabel; \n" +
" new Ajax.Request(webServiceURI+'?'+query, { \n" +
" onComplete: function(request) { \n" +
" if(request.responseText.indexOf('iwbuilder-ok')>=0){ \n" +
" dropTarget.parentNode.insertBefore(element,dropTarget); \n" +
" $('parentId_'+elementContainerId).value = regionId; " +
" }else { alert(request.responseText); } \n" +
" }, method: 'GET',asynchronous: true}) " +
"}});";
}
public IWBundle getBuilderBundle(){
return IWMainApplication.getDefaultIWMainApplication().getBundle(BuilderConstants.IW_BUNDLE_IDENTIFIER);
}
public boolean isFirstBuilderRun(){
ICDomain domain = getCurrentDomain();
if(domain.getStartPageID()==-1){
return true;
}
else{
return false;
}
}
/**
* <p>
* TODO tryggvil describe method initializeBuilderStructure
* </p>
* @param domain
* @param frontPageName
* @throws Exception
*/
public void initializeBuilderStructure(ICDomain domain, String frontPageName) throws Exception {
ICPageHome pageHome = getICPageHome();
ICPage page = pageHome.create();
String rootPageName = frontPageName;
page.setName(rootPageName);
page.setDefaultPageURI("/");
page.setType(ICPageBMPBean.PAGE);
page.store();
unlockRegion(page.getPrimaryKey().toString(),"-1",null);
ICPage page2 = pageHome.create();
page2.setName(frontPageName+" - Template");
page2.setType(ICPageBMPBean.TEMPLATE);
page2.store();
unlockRegion(page2.getPageKey(),"-1",null);
page.setTemplateKey(page2.getPageKey());
page.store();
domain.setIBPage(page);
domain.setStartTemplate(page2);
domain.store();
IBXMLPage xml = getIBXMLPage(page2.getPrimaryKey().toString());
if (xml != null) {
xml.setTemplateId(page2.getPrimaryKey().toString());
xml.addPageUsingThisTemplate(page.getPrimaryKey().toString());
}
clearAllCachedPages();
}
/**
* <p>
* TODO tryggvil describe method getICPageHome
* </p>
* @return
*/
private ICPageHome getICPageHome() {
try {
return (ICPageHome)IDOLookup.getHome(ICPage.class);
}
catch (IDOLookupException e) {
throw new RuntimeException(e);
}
}
private ICObjectHome getICObjectHome() {
try {
return (ICObjectHome) IDOLookup.getHome(ICObject.class);
} catch (IDOLookupException e) {
e.printStackTrace();
return null;
}
}
public int getICObjectId(String objectClass) {
try {
return getICObjectHome().findByClassName(objectClass).getID();
} catch(Exception e) {
e.printStackTrace();
return -1;
}
}
/**
* Saving page structure after moving (drag & drop) tree nodes
* @param IDs Tree nodes' IDs
*/
public boolean movePage(int newParentId, int nodeId, ICDomain domain) {
IBPageHelper.getInstance().movePage(nodeId, newParentId, domain);
return true;
}
public boolean changePageName(int id, String newName, IWContext iwc) {
Map<Integer, PageTreeNode> tree = PageTreeNode.getTree(IWContext.getInstance());
PageTreeNode node = tree.get(id);
node.setNodeName(newName);
node.setLocalizedNodeName(iwc.getCurrentLocale().getLanguage(), newName, iwc);
return IBPageUpdater.addLocalizedPageName(id, ICLocaleBusiness.getLocaleId(iwc.getCurrentLocale()), newName);
}
public Collection getTopLevelTemplates(IWApplicationContext iwac) {
return DomainTree.getDomainTree(iwac).getTemplatesNode().getChildren();
}
public Collection<PageTreeNode> getTopLevelPages(IWContext iwc){
Collection<PageTreeNode> coll = DomainTree.getDomainTree(iwc).getPagesNode().getChildren();
List <PageTreeNode>unsortedNodes = new ArrayList <PageTreeNode> (coll);
List <PageTreeNode>sortedNodes = new ArrayList<PageTreeNode>();
List <PageTreeNode>nodesLeft = new ArrayList<PageTreeNode>();
try {
for(int i = 0; i < coll.size(); i++){
sortedNodes.add(null);
}
for (int i = 0; i < unsortedNodes.size(); i++) {
PageTreeNode node = unsortedNodes.get(i);
// if (node.getOrder() > 0){
if ((node.getOrder() > 0) && (node.getOrder() <= sortedNodes.size())){
if (sortedNodes.get(node.getOrder() - 1) == null){
sortedNodes.set(node.getOrder() - 1, node);
}
else{
nodesLeft.add(node);
unsortedNodes.set(i, null);
}
}
else{
nodesLeft.add(node);
unsortedNodes.set(i, null);
}
}
int nodesLeftIndex = 0;
if (!nodesLeft.isEmpty()){
for (int i = 0; i < sortedNodes.size(); i++) {
if(sortedNodes.get(i) == null){
PageTreeNode node = nodesLeft.get(nodesLeftIndex);
node.setOrder(i+1);
sortedNodes.set(i, node);
nodesLeftIndex++;
if(Integer.parseInt(node.getId()) > -1){
ICPage page = getICPage(node.getId());
if (page != null) {
page.setTreeOrder(i+1);
page.store();
}
}
}
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return coll;
} catch (IDOStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return coll;
}
return sortedNodes;
}
// public boolean wasMoved(String child, String parent){
// String oldParent = child.substring(0, child.length()-1);
// if (oldParent.equals(parent))
// return false;
// else {
// saveChanges(child, parent);
// return true;
// }
// }
// public void saveChanges(String child, String parent){
//
// }
public String getTopLevelTemplateId(Collection templates) {
String id = "-1";
if (templates == null) {
return id;
}
Iterator it = templates.iterator();
PageTreeNode node = null;
Object o = null;
while (it.hasNext()) {
o = it.next();
if (o instanceof PageTreeNode) {
node = (PageTreeNode) o;
if (node.getParentId() == null) {
return node.getId();
}
}
}
return id;
}
public int createNewPage(String parentId, String name, String type, String templateId, String pageUri, Map tree, IWUserContext creatorContext, String subType, int domainId, String format, String sourceMarkup){
return createNewPage(parentId, name, type, templateId, pageUri, tree, creatorContext, subType, domainId, format, sourceMarkup, null);
}
public int createNewPage(String parentId, String name, String type, String templateId, String pageUri, Map tree, IWUserContext creatorContext, String subType, int domainId, String format, String sourceMarkup, String treeOrder) {
//return getIBPageHelper().createNewPage(parentId, name, type, templateId, pageUri, tree, creatorContext, subType, domainId, treeOrder);
return getIBPageHelper().createNewPage(parentId, name, type, templateId, pageUri, tree, creatorContext, subType, domainId, format, sourceMarkup, treeOrder);
// String parentId, String name, String type, String templateId, String pageUri, Map tree, IWUserContext creatorContext, String subType, int domainId, String format, String sourceMarkup, String orderTree
}
public boolean deletePage(String pageId, boolean deleteChildren, Map tree, int userId, ICDomain domain) {
return getIBPageHelper().deletePage(pageId, deleteChildren, tree, userId, domain);
}
public boolean checkDeletePage(String pageId, ICDomain domain) {
return getIBPageHelper().checkDeletePage(pageId, domain);
}
public boolean changePageUriByTitle(String parentId, ICPage page, String pageTitle, int domainId) {
if (page == null || pageTitle == null) {
return false;
}
ICPage parentPage = null;
String pageUri = null;
if(parentId != null){
try {
parentPage = getIBPageHelper().getICPageHome().findByPrimaryKey(parentId);
} catch (FinderException e) {
e.printStackTrace();
return false;
}
PageUrl pUrl = new PageUrl(parentPage, pageTitle, domainId);
pageUri = pUrl.getGeneratedUrlFromName();
}
else{
PageUrl pUrl = new PageUrl(pageTitle);
pageUri = pUrl.getGeneratedUrlFromName();
}
if (pageUri != null) {
page.setDefaultPageURI(pageUri);
page.store();
}
return true;
}
public boolean setPageUri(ICPage page, String pageUri, int domainId) {
if (page == null || pageUri == null) {
return false;
}
pageUri = StringHandler.removeMultipleSlashes(pageUri);
List<String> uriParts = null;
if (pageUri.indexOf(CoreConstants.SLASH) != -1) {
uriParts = Arrays.asList(pageUri.split(CoreConstants.SLASH));
pageUri = "";
for (int i = 0; i < uriParts.size(); i++) {
pageUri = new StringBuilder(pageUri).append(StringHandler.convertToUrlFriendly(uriParts.get(i))).append(CoreConstants.SLASH).toString();
}
}
else {
pageUri = StringHandler.convertToUrlFriendly(pageUri);
}
if (!pageUri.startsWith(CoreConstants.SLASH)) {
pageUri = new StringBuilder(CoreConstants.SLASH).append(pageUri).toString();
}
if (!pageUri.endsWith(CoreConstants.SLASH)) {
pageUri = new StringBuilder(pageUri).append(CoreConstants.SLASH).toString();
}
String pageKey = page.getId();
ICPage pageWithSameUri = page;
String deleted = "deleted";
String uri = null;
int index = 1;
while (pageWithSameUri != null) {
if (!pageWithSameUri.getId().equals(pageKey)) {
if (pageWithSameUri.getDeleted()) {
uri = new StringBuilder(pageWithSameUri.getDefaultPageURI()).append(deleted).append(index).append(CoreConstants.SLASH).toString();
pageWithSameUri.setDefaultPageURI(uri);
pageWithSameUri.store();
}
else {
pageUri = new StringBuilder(pageUri.substring(0, pageUri.length() - 1)).append(index).append(CoreConstants.SLASH).toString();
}
index++;
}
try {
pageWithSameUri = getICPageHome().findByUri(pageUri, domainId);
} catch (FinderException e) {
pageWithSameUri = null;
}
}
page.setDefaultPageURI(pageUri);
page.store();
return true;
}
public boolean movePageToTopLevel(int pageID, IWContext iwc) {
return getIBPageHelper().movePageToTopLevel(pageID, iwc);
}
/**
* Finds the modules' ids
* @param pageKey
* @param moduleClass
* @return
*/
public List<String> getModuleId(String pageKey, String moduleClass) {
if (pageKey == null || moduleClass == null) {
return null;
}
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
if (page == null) {
return null;
}
XMLDocument doc = page.getXMLDocument();
if (doc == null) {
return null;
}
Document d = (Document) doc.getDocument();
Iterator elements = d.getDescendants();
if (elements == null) {
return null;
}
Element element = null;
Attribute elementClass = null;
Attribute elementId = null;
Object o = null;
List<String> ids = new ArrayList<String>();
for (Iterator it = elements; it.hasNext();) {
o = it.next();
if (o instanceof Element) {
element = (Element) o;
}
elementClass = element.getAttribute(IBXMLConstants.CLASS_STRING);
if (elementClass != null) {
if (moduleClass.equals(elementClass.getValue())) {
elementId = element.getAttribute(IBXMLConstants.ID_STRING);
if (elementId != null) {
if (!ids.contains(elementId.getValue())) {
ids.add(elementId.getValue());
}
}
}
}
}
return ids;
}
public String getModuleClassName(String pageKey, String instanceId) {
if (pageKey == null || instanceId == null) {
return null;
}
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
if (xml == null) {
return null;
}
XMLElement module = getIBXMLWriter().findModule(xml, instanceId);
if (module == null) {
return null;
}
XMLAttribute className = module.getAttribute(IBXMLConstants.CLASS_STRING);
if (className == null) {
return null;
}
return className.getValue();
}
/**
* Checks if exact value is set to properties parameter
* @param pageKey
* @param moduleId
* @param propertyName
* @param propertyValue
* @return
*/
public boolean isPropertyValueSet(String pageKey, String moduleId, String propertyName, String propertyValue) {
if (pageKey == null || moduleId == null || propertyName == null || propertyValue == null) {
return false;
}
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (xml == null) {
return false;
}
XMLElement parent = getIBXMLWriter().findModule(xml, moduleId);
if (parent == null) {
return false;
}
XMLElement property = getIBXMLWriter().findProperty(parent, propertyName);
if (property == null) {
return false;
}
XMLAttribute value = property.getAttribute(IBXMLConstants.VALUE_STRING);
if (value == null) {
return false;
}
String realValue = value.getValue();
if (realValue == null) {
return false;
}
if (realValue.indexOf(IBXMLConstants.COMMA_STRING) == -1) { // Not multivalue?
return propertyValue.equals(realValue);
}
else {
String[] values = realValue.split(IBXMLConstants.COMMA_STRING);
for (int i = 0; i < values.length; i++) {
if (propertyValue.equals(values[i])) {
return true;
}
}
}
return false;
}
/**
* Finds exact value and removes from property value (attribute) string
* @param pageKey
* @param moduleId
* @param propertyName
* @param valueToRemove
* @return
*/
public boolean removeValueFromModuleProperty(String pageKey, String moduleId, String propertyName, String valueToRemove) {
return removeValueFromModuleProperty(pageKey, moduleId, propertyName, valueToRemove, true);
}
private boolean removeValueFromModuleProperty(String pageKey, String moduleId, String propertyName, String valueToRemove, boolean storePage) {
if (pageKey == null || moduleId == null || propertyName == null || valueToRemove == null) {
return false;
}
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (xml == null) {
return false;
}
XMLElement parent = getIBXMLWriter().findModule(xml, moduleId);
if (parent == null) {
return false;
}
XMLElement property = getIBXMLWriter().findProperty(parent, propertyName);
if (property == null) {
return false;
}
XMLAttribute value = property.getAttribute(IBXMLConstants.VALUE_STRING);
if (value == null) {
return false;
}
if (value.getValue() == null) {
return false;
}
if (value.getValue().indexOf(valueToRemove) == -1) {
return false;
}
String[] propertyValues = value.getValue().split(IBXMLConstants.COMMA_STRING);
if (propertyValues == null) {
property.detach();
xml.store();
return true;
}
if (propertyValues.length == 0) {
property.detach();
}
StringBuffer newValue = new StringBuffer();
boolean foundValueToRemove = false;
boolean canAppendValue = true;
for (int i = 0; i < propertyValues.length; i++) {
canAppendValue = true;
if (!foundValueToRemove) {
if (propertyValues[i].equals(valueToRemove)) {
foundValueToRemove = true;
canAppendValue = false;
}
}
if (canAppendValue) {
if (i > 0 && propertyValues.length > 2) {
newValue.append(IBXMLConstants.COMMA_STRING);
}
newValue.append(propertyValues[i]);
}
}
if (newValue.toString().equals(IBXMLConstants.EMPTY_STRING)) {
property.detach();
}
else {
value.setValue(newValue.toString());
}
if (storePage) {
xml.store();
}
return true;
}
public boolean removeValueFromModuleProperty(String pageKey, List<String> moduleIds, String propertyName, String valueToRemove) {
if (moduleIds == null) {
return false;
}
for (int i = 0; i < moduleIds.size(); i++) {
removeValueFromModuleProperty(pageKey, moduleIds.get(i), propertyName, valueToRemove, !(i + 1 < moduleIds.size()));
}
return true;
}
public void setTreeOrder(int id, int order){
IBPageHelper.getInstance().setTreeOrder(id, order);
}
public int getTreeOrder(int id){
return IBPageHelper.getInstance().getTreeOrder(id);
}
public void changeTreeOrder(int pageId, int change) {
IBPageHelper.getInstance().changeTreeOrder(pageId, change);
}
public int setAsLastInLevel(boolean isTopLevel, String parentId){
return IBPageHelper.getInstance().setAsLastInLevel(isTopLevel, parentId);
}
public String getExistingPageKeyByURI(String requestURI,ICDomain domain) {
// if the request contains an anchor like http://hello/pages/mypage#foo the requestURI is without an slash at the end
// that is http://hello/pages/mypage
// The missing slash is needed for finding the page.
if (! requestURI.endsWith(StringHandler.SLASH)) {
requestURI = StringHandler.concat(requestURI, StringHandler.SLASH);
}
int indexOfPage = requestURI.indexOf(PAGES_PREFIX);
boolean requestingRoot = false;
if (indexOfPage == -1) {
BuilderPageException pe = new BuilderPageException("Page Cannot be Found for URI: '"+requestURI+"'");
pe.setCode(BuilderPageException.CODE_NOT_FOUND);
pe.setPageUri(requestURI);
throw pe;
}
else{
if(requestURI.equals(PAGES_PREFIX)){
requestingRoot=true;
}
}
if(requestingRoot){
int pageId = domain.getStartPageID();
return Integer.toString(pageId);
}
String iPageId = null;
String uriWithoutPages = requestURI;
//this string will be tried to convert to a number
String uriForNumberParse = requestURI;
if(indexOfPage!=-1) {
uriWithoutPages = requestURI.substring(indexOfPage + 6);
uriForNumberParse = requestURI.substring(indexOfPage + 7);
}
int lastSlash = uriForNumberParse.lastIndexOf(StringHandler.SLASH);
if (lastSlash == -1) {
iPageId = uriForNumberParse;
}
else {
iPageId = uriForNumberParse.substring(0, lastSlash);
}
try{
Integer.parseInt(iPageId);
return iPageId;
}
catch (NumberFormatException nfe) {
//the string is not a number:
//try to find the page in the cache first:
String pageKey = getPageKeyByURICached(requestURI);
if (pageKey != null) { // Should be null if not found, but if found - checking if page is valid
if (getPageCacher().isPageValid(pageKey)) {
return pageKey;
}
}
//if it isn't found in the cache try the database:
ICPage page = getICPageByURIFromDatabase(uriWithoutPages);
if (page == null) {
return null;
}
else {
return page.getPageKey();
}
}
}
private ICPage getICPageByURIFromDatabase(String uri) {
if (uri == null) {
return null;
}
try {
ICPageHome pageHome = (ICPageHome)IDOLookup.getHome(ICPage.class);
return pageHome.findExistingByUri(uri, getCurrentDomain().getID());
}
catch (IDOLookupException e) {
}
catch(FinderException fe) {
}
return null;
}
private String getUriToAddModuleWindow(String regionName) {
Class<AddModuleBlock> addModuleClass = AddModuleBlock.class;
if (regionName == null || CoreConstants.EMPTY.equals(regionName)) {
return getUriToObject(addModuleClass);
}
List<AdvancedProperty> parameters = new ArrayList<AdvancedProperty>();
parameters.add(new AdvancedProperty(BuilderConstants.REGION_NAME, regionName));
return getUriToObject(addModuleClass, parameters);
}
public String getUriToObject(Class<? extends UIComponent> objectClass) {
if (objectClass == null) {
return null;
}
URIUtil uri = new URIUtil(IWMainApplication.getDefaultIWMainApplication().getPublicObjectInstanciatorURI(objectClass));
uri.setParameter("uiObject", Boolean.TRUE.toString());
return uri.getUri();
}
@SuppressWarnings("unchecked")
public String getUriToObject(String objectClassName, List<AdvancedProperty> parameters) {
Class<? extends UIComponent> objectClass = null;
try {
objectClass = (Class<? extends UIComponent>) Class.forName(objectClassName);
} catch (Exception e) {
logger.log(Level.WARNING, "Error creating class from: " + objectClassName, e);
}
return getUriToObject(objectClass, parameters);
}
public String getUriToObject(Class<? extends UIComponent> objectClass, List<AdvancedProperty> parameters) {
String baseUri = getUriToObject(objectClass);
if (StringUtil.isEmpty(baseUri)) {
return null;
}
if (ListUtil.isEmpty(parameters)) {
return baseUri;
}
URIUtil uri = new URIUtil(baseUri);
for (AdvancedProperty parameter: parameters) {
if (!StringUtil.isEmpty(parameter.getId()) && !StringUtil.isEmpty(parameter.getValue())) {
uri.setParameter(parameter.getId(), parameter.getValue());
}
}
return uri.getUri();
}
public boolean removeBlockObjectFromCache(String cacheKey) {
return removeBlockObjectFromCache(CoreUtil.getIWContext(), cacheKey);
}
public boolean removeBlockObjectFromCache(IWContext iwc, String cacheKey) {
if (iwc == null || cacheKey == null) {
return false;
}
IWCacheManager cache = iwc.getIWMainApplication().getIWCacheManager();
if (cache == null) {
return false;
}
if (cache.isCacheValid(cacheKey)) {
cache.invalidateCache(cacheKey);
}
else {
List <String> modifiedKeys = new ArrayList<String>();
Map cached = cache.getCacheMap();
if (cached != null) {
for (Iterator it = cached.keySet().iterator(); it.hasNext(); ) {
modifiedKeys.add(it.next().toString());
}
}
if (modifiedKeys.size() == 0) {
return false;
}
for (int i = 0; i < modifiedKeys.size(); i++) {
if (modifiedKeys.get(i).startsWith(cacheKey)) {
cache.invalidateCache(modifiedKeys.get(i));
}
}
}
return true;
}
public boolean removeAllBlockObjectsFromCache(IWContext iwc) {
if (iwc == null) {
return false;
}
IWCacheManager cache = iwc.getIWMainApplication().getIWCacheManager();
if (cache == null) {
return false;
}
List <String> cacheKeys = new ArrayList<String>();
Map cached = cache.getCacheMap();
if (cached != null) {
for (Iterator it = cached.keySet().iterator(); it.hasNext(); ) {
cacheKeys.add(it.next().toString());
}
}
if (cacheKeys.size() == 0) {
return false;
}
for (int i = 0; i < cacheKeys.size(); i++) {
cache.invalidateCache(cacheKeys.get(i));
}
return true;
}
public void renameRegion(String pageKey, String region_id, String region_label, String new_region_id, String new_region_label) {
if (pageKey == null || region_id == null || new_region_id == null) {
throw new NullPointerException(
"Either is not provided: "+
"\npageKey: "+pageKey+
"\nregion_id: "+region_id+
"\nnew_region_id: "+new_region_id
);
}
IBXMLPage xml = null;
try {
xml = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return;
}
if (xml == null)
throw new NullPointerException("Page not found by key provided: "+pageKey);
XMLElement region = getIBXMLWriter().findRegion(xml, region_label == null ? region_id : region_label, region_id);
if(region == null)
throw new NullPointerException(
"Region not found by values provided: "+
"\nregion_id: "+region_id+
"\nregion_label: "+region_label
);
region.setAttribute(IBXMLConstants.ID_STRING, new_region_id);
region.setAttribute(IBXMLConstants.LABEL_STRING, new_region_label == null ? new_region_id : new_region_label);
xml.store();
}
/**
* Renders single UIComponent
* @param iwc
* @param component - object to render
* @param cleanCode
* @return String of rendered object or null
*/
public String getRenderedComponent(UIComponent component, IWContext iwc, boolean cleanCode) {
return getRenderedComponent(component, iwc, cleanCode, true, true);
}
@SuppressWarnings("unchecked")
public synchronized String getRenderedComponent(UIComponent component, IWContext iwc, boolean cleanCode, boolean omitDocTypeDeclaration,
boolean omitHtmlEnvelope) {
if (iwc == null || component == null) {
return null;
}
iwc.setSessionAttribute(CoreConstants.SINGLE_UICOMPONENT_RENDERING_PROCESS, Boolean.TRUE);
HtmlBufferResponseWriterWrapper writer = null;
try {
writer = HtmlBufferResponseWriterWrapper.getInstance(iwc.getResponseWriter());
iwc.setResponseWriter(writer);
} catch(Exception e) {
e.printStackTrace();
}
if (writer == null) {
return null;
}
if (iwc.getViewRoot() == null) {
UIViewRoot root = new UIViewRoot();
root.setRenderKitId(RenderKitFactory.HTML_BASIC_RENDER_KIT);
iwc.setViewRoot(root);
}
List<String> jsSources = null;
List<String> jsActions = null;
List<String> cssSources = null;
try {
RenderUtils.renderChild(iwc, component);
Object o = iwc.getSessionAttribute(PresentationUtil.ATTRIBUTE_JAVA_SCRIPT_SOURCE_FOR_HEADER);
if (o instanceof List) {
jsSources = (List<String>) o;
}
o = iwc.getSessionAttribute(PresentationUtil.ATTRIBUTE_JAVA_SCRIPT_ACTION_FOR_BODY);
if (o instanceof List) {
jsActions = (List<String>) o;
}
o = iwc.getSessionAttribute(PresentationUtil.ATTRIBUTE_CSS_SOURCE_LINE_FOR_HEADER);
if (o instanceof List) {
cssSources = (List<String>) o;
}
} catch (Exception e){
e.printStackTrace();
return null;
} finally {
iwc.removeSessionAttribute(CoreConstants.SINGLE_UICOMPONENT_RENDERING_PROCESS);
iwc.removeSessionAttribute(PresentationUtil.ATTRIBUTE_JAVA_SCRIPT_SOURCE_FOR_HEADER);
iwc.removeSessionAttribute(PresentationUtil.ATTRIBUTE_JAVA_SCRIPT_ACTION_FOR_BODY);
iwc.removeSessionAttribute(PresentationUtil.ATTRIBUTE_CSS_SOURCE_LINE_FOR_HEADER);
}
String rendered = writer.toString();
if (rendered == null) {
return null;
}
if (cleanCode) {
rendered = getCleanedHtmlContent(rendered, omitDocTypeDeclaration, omitHtmlEnvelope, false);
}
if (jsSources != null || jsActions != null || cssSources != null) {
Object addCSSDirectly = iwc.getSessionAttribute(PresentationUtil.ATTRIBUTE_ADD_CSS_DIRECTLY);
if (addCSSDirectly != null) {
iwc.removeSessionAttribute(PresentationUtil.ATTRIBUTE_ADD_CSS_DIRECTLY);
}
rendered = getRenderedComponentWithDynamicResources(getXMLDocumentFromComponentHTML(rendered, false, omitDocTypeDeclaration, omitHtmlEnvelope,
false), cssSources, jsSources, jsActions, addCSSDirectly instanceof Boolean ? (Boolean) addCSSDirectly : false);
if (cleanCode) {
rendered = getCleanedFromXmlDeclaration(rendered);
}
}
return rendered;
}
private String getRenderedComponentWithDynamicResources(Document component, List<String> cssSources, List<String> jsSources, List<String> jsActions,
boolean addCSSDirectly) {
if (component == null) {
return null;
}
Element root = component.getRootElement();
if (root == null) {
return null;
}
List<String> resourcesToLoad = new ArrayList<String>();
// CSS
if (!ListUtil.isEmpty(cssSources)) {
if (addCSSDirectly) {
Collection<Element> cssElements = new ArrayList<Element>(cssSources.size());
for (String cssUri: cssSources) {
Element css = new Element("link");
css.setAttribute(new Attribute("type", "text/css"));
css.setAttribute(new Attribute("rel", "stylesheet"));
css.setAttribute(new Attribute("media", "screen"));
css.setAttribute(new Attribute("href", cssUri));
cssElements.add(css);
}
root.addContent(cssElements);
}
else {
for (String cssUri: cssSources) {
if (!resourcesToLoad.contains(cssUri)) {
resourcesToLoad.add(cssUri);
}
}
}
}
// JavaScript sources
if (!ListUtil.isEmpty(jsSources) || !ListUtil.isEmpty(resourcesToLoad)) {
StringBuffer actionsInSingleFunction = null;
if (jsActions != null) {
actionsInSingleFunction = new StringBuffer("function() {");
for (String jsAction: jsActions) {
actionsInSingleFunction.append(jsAction);
}
actionsInSingleFunction.append("}");
jsActions.clear();
}
if (!ListUtil.isEmpty(jsSources)) {
for (String jsResource: jsSources) {
if (!resourcesToLoad.contains(jsResource)) {
resourcesToLoad.add(jsResource);
}
}
}
String action = PresentationUtil.getJavaScriptLinesLoadedLazily(resourcesToLoad, actionsInSingleFunction == null ? null :
actionsInSingleFunction.toString());
Collection<Element> includeScriptsAndExecuteActions = new ArrayList<Element>(1);
Element mainAction = new Element("script");
mainAction.setAttribute(new Attribute("type", "text/javascript"));
mainAction.setText(action);
includeScriptsAndExecuteActions.add(mainAction);
root.addContent(includeScriptsAndExecuteActions);
}
// JavaScript actions
if (jsActions != null && !jsActions.isEmpty()) {
Collection<Element> actions = new ArrayList<Element>(jsActions.size());
for (String jsAction: jsActions) {
Element action = new Element("script");
action.setAttribute(new Attribute("type", "text/javascript"));
action.setText(jsAction);
actions.add(action);
}
root.addContent(actions);
}
return getJDOMOutputter().outputString(component);
}
private XMLOutputter getJDOMOutputter() {
if (outputter == null) {
outputter = new XMLOutputter(Format.getPrettyFormat());
}
return outputter;
}
/**
* Renders single UIComponent and creates JDOM Document of rendered object
* @param iwc
* @param component - object to render
* @param cleanCode
* @return JDOM Document or null
*/
public Document getRenderedComponent(IWContext iwc, UIComponent component, boolean cleanCode) {
return getRenderedComponent(iwc, component, cleanCode, true, true);
}
public Document getRenderedComponent(IWContext iwc, UIComponent component, boolean cleanCode, boolean omitDocTypeDeclaration, boolean omitHtmlEnvelope) {
return getXMLDocumentFromComponentHTML(getRenderedComponent(component, iwc, cleanCode, omitDocTypeDeclaration, omitHtmlEnvelope), false,
omitDocTypeDeclaration, omitHtmlEnvelope, true);
}
private Document getXMLDocumentFromComponentHTML(String componentHTML, boolean cleanCode, boolean omitDocTypeDeclaration, boolean omitHtmlEnvelope,
boolean omitComments) {
if (StringUtil.isEmpty(componentHTML))
return null;
if (cleanCode)
componentHTML = getCleanedHtmlContent(componentHTML, omitDocTypeDeclaration, omitHtmlEnvelope, omitComments);
// Removing <!--... ms-->
Matcher commentsMatcher = getCommentRemplacementPattern().matcher(componentHTML);
componentHTML = commentsMatcher.replaceAll(CoreConstants.EMPTY);
// Removing <!DOCTYPE .. >
Matcher docTypeMatcher = getDoctypeReplacementPattern().matcher(componentHTML);
componentHTML = docTypeMatcher.replaceAll(CoreConstants.EMPTY);
// Do not add any more replaceAll - HtmlCleaner should fix ALL problems
// Replace symbols which can cause exceptions with SAXParser
componentHTML = componentHTML.replaceAll("ö", "ö");
componentHTML = componentHTML.replaceAll("Ö", "ö");
componentHTML = componentHTML.replaceAll(" ", " ");
componentHTML = componentHTML.replaceAll("í", "í");
// componentHTML = componentHTML.replaceAll("<", "<");
// componentHTML = componentHTML.replaceAll(">", ">");
componentHTML = StringHandler.replace(componentHTML, "xf:itemset", "div");
componentHTML = StringHandler.replace(componentHTML, "xf:item", "div");
if (StringUtil.isEmpty(componentHTML)) {
logger.warning("HTML code is empty!");
return null;
}
Document componentXML = null;
try {
componentXML = XmlUtil.getJDOMXMLDocument(componentHTML, false);
} catch(Exception e) {
logger.log(Level.SEVERE, "Error getting XML document from HTML code:\n" + componentHTML, e);
}
if (componentXML == null && !cleanCode) {
logger.log(Level.INFO, "Trying with cleaned HTML code because uncleaned HTML code just failed to create document from:\n" + componentHTML);
return getXMLDocumentFromComponentHTML(componentHTML, true, omitDocTypeDeclaration, omitHtmlEnvelope, omitComments);
}
return componentXML;
}
public String getCleanedHtmlContent(InputStream htmlStream, boolean omitDocTypeDeclaration, boolean omitHtmlEnvelope, boolean omitComments) {
return getCleanedHtmlContent(htmlStream, null, omitDocTypeDeclaration, omitHtmlEnvelope, omitComments);
}
public String getCleanedHtmlContent(String htmlContent, boolean omitDocTypeDeclaration, boolean omitHtmlEnvelope, boolean omitComments) {
return getCleanedHtmlContent(null, htmlContent, omitDocTypeDeclaration, omitHtmlEnvelope, omitComments);
}
private String getCleanedHtmlContent(InputStream htmlStream, String htmlContent, boolean omitDocTypeDeclaration, boolean omitHtmlEnvelope,
boolean omitComments) {
if (htmlStream == null && htmlContent == null) {
return null;
}
HtmlCleaner cleaner = htmlStream == null ? new HtmlCleaner(htmlContent) : new HtmlCleaner(htmlStream);
cleaner.setOmitDoctypeDeclaration(omitDocTypeDeclaration);
cleaner.setOmitHtmlEnvelope(omitHtmlEnvelope);
cleaner.setOmitComments(omitComments);
cleaner.setOmitXmlDeclaration(true);
cleaner.setUseCdataForScriptAndStyle(false);
try {
cleaner.clean();
htmlContent = cleaner.getPrettyXmlAsString();
} catch (Exception e) {
logger.log(Level.SEVERE, "Error cleaning content" + (htmlContent == null ? CoreConstants.EMPTY : ":\n" + htmlContent), e);
return null;
}
return getCleanedFromXmlDeclaration(htmlContent);
}
private String getCleanedFromXmlDeclaration(String htmlContent) {
// Removing <?xml version... />
for (Pattern pattern: getXmlEncodingReplacementPatterns()) {
try {
Matcher patternMatcher = pattern.matcher(htmlContent);
htmlContent = patternMatcher.replaceAll(CoreConstants.EMPTY);
} catch (Exception e) {
e.printStackTrace();
}
}
String xmlDeclaration = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
if (htmlContent.indexOf(xmlDeclaration) != -1)
htmlContent = StringHandler.replace(htmlContent, xmlDeclaration, CoreConstants.EMPTY);
return htmlContent.trim();
}
private List<Pattern> getXmlEncodingReplacementPatterns() {
if (xmlEncodingReplacementPatterns == null) {
xmlEncodingReplacementPatterns = Arrays.asList(
Pattern.compile("<.+?xml.+>")
);
}
return xmlEncodingReplacementPatterns;
}
private Pattern getDoctypeReplacementPattern() {
if (doctypeReplacementPattern == null) {
doctypeReplacementPattern = Pattern.compile("<!DOCTYPE[^>]*>");
}
return doctypeReplacementPattern;
}
private Pattern getCommentRemplacementPattern() {
if (commentinHtmlReplacementPattern == null) {
commentinHtmlReplacementPattern = Pattern.compile("<!--\\d+ ms-->");
}
return commentinHtmlReplacementPattern;
}
public boolean setModuleProperty(String pageKey, String moduleId, String propertyName, String[] properties) {
if (pageKey == null || moduleId == null || propertyName == null || properties == null) {
return false;
}
IWMainApplication application = null;
IWContext iwc = CoreUtil.getIWContext();
if (iwc == null) {
application = IWMainApplication.getDefaultIWMainApplication();
}
else {
application = iwc.getIWMainApplication();
}
if (application == null) {
return false;
}
boolean result = setProperty(pageKey, moduleId, propertyName, properties, application);
if (result) {
Object handler = iwc.getSessionAttribute(CoreConstants.HANDLER_PARAMETER);
if (handler instanceof ICPropertyHandler) {
iwc.removeSessionAttribute(CoreConstants.HANDLER_PARAMETER);
((ICPropertyHandler) handler).onUpdate(properties, iwc);
}
removeBlockObjectFromCache(iwc, BuilderConstants.SET_MODULE_PROPERTY_CACHE_KEY);
removeBlockObjectFromCache(iwc, BuilderConstants.EDIT_MODULE_WINDOW_CACHE_KEY);
}
return result;
}
public String generateResourcePath(String base, String scope, String fileName) {
IWSlideService service = getSlideService();
StringBuffer path = new StringBuffer(getYearMonthPath(base)).append(BuilderConstants.SLASH);
path.append(service.createUniqueFileName(scope)).append(BuilderConstants.DOT);
path.append(fileName);
return path.toString();
}
/**
* Creates path (uri) based on base path and current time
* @return
*/
private String getYearMonthPath(String basePath) {
StringBuffer path = new StringBuffer(basePath).append(BuilderConstants.SLASH);
path.append(getYearMonthPath());
return path.toString();
}
/**
* Creates path (uri) based on current time
* @return
*/
public String getYearMonthPath() {
IWTimestamp now = new IWTimestamp();
StringBuffer path = new StringBuffer();
path.append(now.getYear()).append(BuilderConstants.SLASH).append(now.getDateString("MM"));
return path.toString();
}
private synchronized IWSlideService getSlideService() {
if (slideService == null) {
try {
slideService = IBOLookup.getServiceInstance(CoreUtil.getIWContext(), IWSlideService.class);
} catch (IBOLookupException e) {
e.printStackTrace();
return null;
}
}
return slideService;
}
public UIComponent findComponentInPage(IWContext iwc, String pageKey, String instanceId) {
if (pageKey == null || instanceId == null || iwc == null) {
return null;
}
Page page = getPage(pageKey, iwc);
if (page == null) {
return null;
}
return findComponentInList(page.getChildren(), instanceId);
}
private UIComponent findComponentInList(List<UIComponent> children, String instanceId) {
if (children == null || instanceId == null) {
return null;
}
UIComponent component = null;
UIComponent componentFromCycle = null;
Map<String, UIComponent> facets = null;
List<UIComponent> cFromMap = null;
boolean foundComponent = false;
for (int i = 0; (i < children.size() && !foundComponent); i++) {
component = children.get(i);
if (instanceId.equals(getInstanceId(component))) {
foundComponent = true;
} else {
componentFromCycle = findComponentInList(component.getChildren(), instanceId);
if (componentFromCycle == null) {
// Didn't find in children's list, will check facets map
facets = component.getFacets();
if (facets != null) {
cFromMap = new ArrayList<UIComponent>();
for (Iterator<UIComponent> it = facets.values().iterator(); it.hasNext();) {
cFromMap.add(it.next());
}
componentFromCycle = findComponentInList(cFromMap, instanceId);
}
}
if (componentFromCycle != null) {
foundComponent = true;
component = componentFromCycle;
}
}
}
if (!foundComponent) {
return null;
}
return component;
}
public Document getRenderedModule(String pageKey, String componentId, boolean cleanCode) {
if (pageKey == null || componentId == null) {
return null;
}
IWContext iwc = CoreUtil.getIWContext();
if (iwc == null) {
return null;
}
UIComponent component = findComponentInPage(iwc, pageKey, componentId);
if (component == null) {
return null;
}
return getRenderedComponent(iwc, component, cleanCode);
}
public boolean existsRegion(String pageKey, String label, String regionId) {
if (pageKey == null) {
return false;
}
XMLElement region = null;
try {
region = getIBXMLWriter().findRegion(getIBXMLPage(pageKey), label, regionId);
} catch(Exception e) {
e.printStackTrace();
return false;
}
return region == null ? false : true;
}
public boolean copyAllModulesFromRegionIntoRegion(String pageKey, String sourceRegionLabel, String destinationRegionId, String destinationRegionLabel,
IWSlideSession session) {
if (pageKey == null || sourceRegionLabel == null || destinationRegionId == null || destinationRegionLabel == null) {
return false;
}
IBXMLPage page = null;
try {
page = getIBXMLPage(pageKey);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (page == null) {
return false;
}
XMLElement sourceRegion = getIBXMLWriter().findRegion(page, sourceRegionLabel, null);
if (sourceRegion == null) {
return false;
}
// TODO: Find all modules, not just first level ones
List<XMLElement> modules = sourceRegion.getChildren(IBXMLConstants.MODULE_STRING);
if (modules == null) {
return false;
}
String id = null;
Object o = null;
for (int i = 0; i < modules.size(); i++) {
o = modules.get(i).clone();
if (o instanceof XMLElement) {
id = getIBXMLWriter().insertElementLast(page, pageKey, destinationRegionId, destinationRegionLabel, (XMLElement) o, true);
if (id == null) {
return false;
}
}
else {
return false;
}
}
if (savePage(page, session)) {
return true;
}
return false;
}
public List<ICPage> findPagesForModule(Class<? extends UIComponent> theClass) {
return findPagesForModule(theClass, true);
}
private List<ICPage> findPagesForModule(Class<? extends UIComponent> theClass, boolean reTry) {
if (theClass == null) {
return null;
}
try {
ICObjectHome icObjectHome = (ICObjectHome) IDOLookup.getHome(ICObject.class);
ICObject icObject = icObjectHome.findByClassName(theClass.getName());
if (icObject == null) {
return null;
}
ICObjectInstanceHome icObjectInstanceHome = (ICObjectInstanceHome) IDOLookup.getHome(ICObjectInstance.class);
Collection<ICObjectInstance> instances = icObjectInstanceHome.getByICObject(icObject);
if (ListUtil.isEmpty(instances)) {
return null;
}
ICPageHome icPageHome = (ICPageHome) IDOLookup.getHome(ICPage.class);
List<ICPage> pagesWithModules = new ArrayList<ICPage>();
for (ICObjectInstance instance: instances) {
ICPage page = null;
try {
page = icPageHome.findByPrimaryKey(instance.getIBPageID());
} catch (FinderException e) {}
if (page != null) {
pagesWithModules.add(page);
}
}
return pagesWithModules;
} catch (FinderException e) {
logger.warning("Module by class name " + theClass.getName() + " is not registered");
} catch (Exception e) {
logger.log(Level.WARNING, "Unable to find any page with module " + theClass.getName(), e);
}
if (reTry) {
doClearAllCaches();
return findPagesForModule(theClass, false);
}
return null;
}
@SuppressWarnings("deprecation")
public void doClearAllCaches() {
clearAllCachedPages();
IBOLookup.clearAllCache();
IDOContainer.getInstance().flushAllBeanCache();
IDOContainer.getInstance().flushAllQueryCache();
IWCacheManager2.getInstance(getIWMainApplication()).reset();
IWCacheManager.getInstance(getIWMainApplication()).clearAllCaches();
}
public ICPage findPageForModule(IWApplicationContext iwac, String instanceId) {
return findPageForModule(iwac.getIWMainApplication(), instanceId);
}
public ICPage findPageForModule(IWMainApplication iwma, String instanceId) {
if (instanceId == null)
return null;
Map<Integer, PageTreeNode> pages = PageTreeNode.getTree(iwma);
if (MapUtil.isEmpty(pages))
return null;
Iterator<PageTreeNode> allPages = pages.values().iterator();
ICPage page = null;
String pageId = null;
for (Iterator<PageTreeNode> it = allPages; it.hasNext();) {
pageId = it.next().getId();
try {
page = getICPageHome().findByPrimaryKey(pageId);
} catch(Exception e) {
page = null;
}
if (page != null && page.getIsFormattedInIBXML()) {
try {
if (getIBXMLWriter().findModule(getIBXMLPage(pageId), instanceId) != null) {
return page;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
public boolean reloadGroupsInCachedDomain(IWApplicationContext iwac, String serverName) {
try {
ICDomain mostlyCachedDomain = iwac.getDomain();
if (serverName == null) {
serverName = mostlyCachedDomain.getServerName();
}
ICDomain domain = ((ICDomainHome) IDOLookup.getHome(ICDomain.class)).findDomainByServernameOrDefault(serverName);
Collection groups = domain.getTopLevelGroupsUnderDomain();
if (mostlyCachedDomain instanceof CachedDomain) {
((CachedDomain) mostlyCachedDomain).setTopLevelGroupsUnderDomain(groups);
BaseFilter.reInitializeCachedDomainOnNextRequest();
}
} catch(Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public String getFullPageUrlByPageType(IWContext iwc, String pageType, boolean checkFirstlyNearestPages) {
User usr = iwc == null ? null : iwc.isLoggedOn() ? iwc.getCurrentUser() : null;
return getFullPageUrlByPageType(usr, iwc, pageType, checkFirstlyNearestPages);
}
public String getFullPageUrlByPageType(User user, IWContext iwc, String pageType, boolean checkFirstlyNearestPages) {
String serverURL = iwc.getServerURL();
String pageUri;
if (user == null)
pageUri = getPageUri(iwc, pageType, checkFirstlyNearestPages);
else
pageUri = getPageUri(user, iwc, pageType, checkFirstlyNearestPages);
serverURL = serverURL.endsWith(CoreConstants.SLASH) ? serverURL.substring(0, serverURL.length()-1) : serverURL;
String fullURL = new StringBuilder(serverURL)
.append(pageUri.startsWith(CoreConstants.SLASH) ? CoreConstants.EMPTY : CoreConstants.SLASH)
.append(pageUri)
.toString();
return fullURL;
}
public String getFullPageUrlByPageType(User user, String pageType, boolean checkFirstlyNearestPages) {
String serverURL = null;
if (isDevelopementState()) {
serverURL = getIWMainApplication().getSettings().getProperty(
IWConstants.SERVER_URL_PROPERTY_NAME,
CoreConstants.DEVELOPEMENT_SERVER_URL
);
} else {
serverURL = getIWMainApplication().getSettings().getProperty(
IWConstants.SERVER_URL_PROPERTY_NAME
);
}
String pageUri = null;
pageUri = getPageUri(user, pageType, checkFirstlyNearestPages);
serverURL = serverURL.endsWith(CoreConstants.SLASH) ? serverURL.substring(0, serverURL.length()-1) : serverURL;
String fullURL = new StringBuilder(serverURL)
.append(pageUri.startsWith(CoreConstants.SLASH) ? CoreConstants.EMPTY : CoreConstants.SLASH)
.append(pageUri)
.toString();
return fullURL;
}
public ICPage getNearestPageForUserHomePageOrCurrentPageByPageType(IWContext iwc, String pageType) {
User usr = iwc.isLoggedOn() ? iwc.getCurrentUser() : null;
return getNearestPageForUserHomePageOrCurrentPageByPageType(usr, iwc, pageType);
}
@SuppressWarnings("unchecked")
public ICPage getNearestPageForUserHomePageOrCurrentPageByPageType(User user, IWContext iwc, String pageType) {
ICPage startPage = null;
ICPage nearestPage = null;
if (user != null) {
nearestPage = getNearestPageForUserHomePage(user,pageType);
if (nearestPage != null)
return nearestPage;
}
// Trying to get nearest page to current page
try {
startPage = getICPage(String.valueOf(iwc.getCurrentIBPageID()));
} catch(Exception e) {
e.printStackTrace();
}
if (startPage == null) {
logger.warning("Didn't find start page! Searching for page with type: " + pageType + " for user: " + user);
return null;
}
ICTreeNode parentNode = startPage.getParentNode();
Collection<ICTreeNode> children = null;
if (parentNode == null) {
children = new ArrayList<ICTreeNode>(1); // Checking "start" page and its children
children.add(startPage);
} else {
children = parentNode.getChildren(); // Checking "start" page's siblings and children
}
nearestPage = getPageByPageType(children, pageType);
return nearestPage;
}
/**
* Only searches the users main home page and below that for the page type
* @param currentUser
* @param pageType
* @return
*/
@SuppressWarnings("unchecked")
public ICPage getNearestPageForUserHomePage(User user, String pageType) {
if (user == null) {
logger.warning("User is not provided");
return null;
}
ICPage startPage = getUsersHomePage(user);
if (startPage == null) {
logger.warning("Didn't find start page for user: " + user);
return null;
}
ICPage nearestPage = null;
Collection<ICTreeNode> searchTops = new ArrayList<ICTreeNode>();
searchTops.add(startPage);
Collection children = startPage.getChildren();
if (!ListUtil.isEmpty(children))
searchTops.addAll(children);
ICTreeNode parent = startPage.getParentNode();
Collection siblings = parent != null ? parent.getChildren() : new ArrayList<ICTreeNode>();
if (!ListUtil.isEmpty(siblings))
searchTops.addAll(siblings);
// TODO: it fails to find page in children of children of start page!
nearestPage = getPageByPageType(searchTops, pageType);
if (nearestPage == null)
logger.warning("Didn't find nearest page by page type " + pageType + " to user's " + user + " home page (ID: " + startPage.getId() +
", URI: " + startPage.getDefaultPageURI() + "). Searched in " + searchTops);
else
logger.info("Found nearest page (ID: " + nearestPage.getId() + ", URI: " + nearestPage.getDefaultPageURI() + ") by page type " +
pageType + " to user's " + user + " home page (ID: " + startPage.getId() + ", URI: " + startPage.getDefaultPageURI() + ")");
return nearestPage;
}
public ICPage getUsersHomePage(User user) {
ICPage startPage = null;
try {
UserBusiness userBiz = IBOLookup.getServiceInstance(IWMainApplication.getDefaultIWApplicationContext(), UserBusiness.class);
startPage = userBiz.getHomePageForUser(user);
} catch (FinderException e) {
logger.warning("Homepage was not found for user: " + user);
} catch (Exception e) {
logger.log(Level.WARNING, "Error getting homepage for user: " + user, e);
}
return startPage;
}
@SuppressWarnings("unchecked")
private ICPage getPageByPageType(Collection<ICTreeNode> pages, String pageType) {
if (ListUtil.isEmpty(pages))
return null;
ICPage page = null;
Collection<ICTreeNode> children = null;
for (ICTreeNode node: pages) {
page = getICPage(node.getId());
if (page != null) {
if (pageType.equals(page.getSubType())) {
return page;
}
children = page.getChildren();
if (!ListUtil.isEmpty(children)) {
getPageByPageType(children, pageType);
}
}
}
return null;
}
protected String getPageUri(IWContext iwc, String pageType, boolean checkFirstlyNearestPages) {
User user = iwc.isLoggedOn() ? iwc.getCurrentUser() : null;
return getPageUri(user, iwc, pageType, checkFirstlyNearestPages);
}
protected String getPageUri(User user, IWContext iwc, String pageType, boolean checkFirstlyNearestPages) {
ICPage icPage = null;
String messageForException = "No page found by page type: " + pageType;
if (checkFirstlyNearestPages) {
if (user == null) {
icPage = getNearestPageForUserHomePageOrCurrentPageByPageType(iwc, pageType);
} else {
icPage = getNearestPageForUserHomePageOrCurrentPageByPageType(user, iwc, pageType);
}
}
//last resort find the first page of that type
if (icPage == null) {
Collection<ICPage> icpages = getPages(pageType);
if (icpages == null || icpages.isEmpty())
throw new RuntimeException(messageForException);
icPage = icpages.iterator().next();
}
if (icPage == null)
throw new RuntimeException(messageForException);
String uri = icPage.getDefaultPageURI();
if (!uri.startsWith(CoreConstants.PAGES_URI_PREFIX))
uri = CoreConstants.PAGES_URI_PREFIX + uri;
return iwc.getIWMainApplication().getTranslatedURIWithContext(uri);
}
protected String getPageUri(User user, String pageType, boolean checkFirstlyNearestPages) {
ICPage icPage = null;
String messageForException = "No page found by page type: " + pageType;
if (checkFirstlyNearestPages)
icPage = getNearestPageForUserHomePage(user, pageType);
if (icPage == null) {
logger.warning("Did not find page by type " + pageType + " for user " + user + " near to it's home page");
Collection<ICPage> icpages = getPages(pageType);
if (icpages == null || icpages.isEmpty())
throw new RuntimeException(messageForException);
icPage = icpages.iterator().next();
}
if (icPage == null)
throw new RuntimeException(messageForException);
String uri = icPage.getDefaultPageURI();
if (!uri.startsWith(CoreConstants.PAGES_URI_PREFIX))
uri = CoreConstants.PAGES_URI_PREFIX + uri;
return getIWMainApplication().getTranslatedURIWithContext(uri);
}
protected Collection<ICPage> getPages(String pageSubType) {
try {
ICPageHome home = (ICPageHome) IDOLookup.getHome(ICPage.class);
Collection<ICPage> icpages = home.findBySubType(pageSubType, false);
return icpages;
} catch (Exception e) {
throw new RuntimeException("Exception while resolving icpages by subType: "+pageSubType, e);
}
}
private RenderedComponent getRenderedInstanciatedComponent(IWContext iwc, UIComponent component) {
RenderedComponent rendered = new RenderedComponent();
rendered.setErrorMessage("Ooops... Some error occurred rendering component...");
Web2Business web2 = getWeb2Business();
JQuery jQuery = getJQUery();
if (web2 != null && jQuery != null) {
List<String> resources = new ArrayList<String>();
resources.add(web2.getBundleUriToHumanizedMessagesStyleSheet());
resources.add(jQuery.getBundleURIToJQueryLib());
resources.add(web2.getBundleUriToHumanizedMessagesScript());
rendered.setResources(resources);
}
if (iwc == null) {
iwc = CoreUtil.getIWContext();
}
String html = getRenderedComponent(component, iwc, true, true, true);
if (StringUtil.isEmpty(html)) {
if (iwc != null) {
rendered.setErrorMessage(iwc.getIWMainApplication().getBundle(BuilderConstants.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc)
.getLocalizedString("error_rendering_component", rendered.getErrorMessage()));
}
return rendered;
}
rendered.setErrorMessage(null);
rendered.setHtml(html);
return rendered;
}
public RenderedComponent getRenderedComponentById(String uuid, String uri, List<AdvancedProperty> properties) {
if (StringUtil.isEmpty(uuid)) {
logger.log(Level.WARNING, "Unknown UUID!");
return getRenderedInstanciatedComponent(null, null);
}
IWContext iwc = CoreUtil.getIWContext();
if (iwc == null) {
logger.log(Level.WARNING, "IWContext is unavailable");
return getRenderedInstanciatedComponent(null, null);
}
String pageKey = null;
try {
pageKey = getPageKeyByURI(uri, iwc.getDomain());
} catch(Exception e) {
logger.log(Level.WARNING, "Error getting page key by uri: " + uri);
}
if (StringUtil.isEmpty(pageKey)) {
try {
pageKey = getPageKeyByURI(iwc.getRequestURI(), iwc.getDomain());
} catch(Exception e) {
logger.log(Level.WARNING, "Error getting page key by uri: " + iwc.getRequestURI());
}
}
if (StringUtil.isEmpty(pageKey)) {
pageKey = String.valueOf(iwc.getCurrentIBPageID());
}
if (StringUtil.isEmpty(pageKey)) {
logger.log(Level.WARNING, "Unable to get page key!");
return getRenderedInstanciatedComponent(null, null);
}
UIComponent component = findComponentInPage(iwc, pageKey, uuid);
if (component == null) {
logger.log(Level.SEVERE, "Didn't find component by uuid ('" + uuid + "') in page: " + pageKey);
}
return getRenderedComponent(component, properties);
}
public RenderedComponent getRenderedComponentByClassName(String className, List<AdvancedProperty> properties) {
UIComponent component = null;
if (StringUtil.isEmpty(className)) {
return getRenderedInstanciatedComponent(null, null);
}
Object o = null;
try {
o = Class.forName(className).newInstance();
} catch (Exception e) {
logger.log(Level.SEVERE, "Error creating instance of: " + className, e);
}
if (o instanceof UIComponent) {
component = (UIComponent) o;
}
else {
logger.log(Level.WARNING, "Instance of '" + className + "' is not UIComponent!");
return getRenderedInstanciatedComponent(null, null);
}
return getRenderedComponent(component, properties);
}
public RenderedComponent getRenderedComponent(UIComponent component, List<AdvancedProperty> properties) {
if (component == null) {
return getRenderedInstanciatedComponent(null, null);
}
setPropertiesForObjectInstance(component, properties);
return getRenderedInstanciatedComponent(CoreUtil.getIWContext(), component);
}
private void setPropertiesForObjectInstance(Object o, List<AdvancedProperty> properties) {
if (o == null || ListUtil.isEmpty(properties)) {
return;
}
for (AdvancedProperty property: properties) {
try {
MethodInvoker.getInstance().invokeMethodWithParameter(o, property.getId(), property.getValue());
} catch (Exception e) {
logger.log(Level.WARNING, "Error invoking method '" + property.getId() + "' with value: " + property.getValue(), e);
}
}
}
public List<com.idega.core.component.business.ComponentProperty> getComponentProperties(IWContext iwc, String instanceId) {
if (StringUtil.isEmpty(instanceId) || iwc == null) {
return null;
}
return IBPropertyHandler.getInstance().getComponentProperties(instanceId, iwc.getIWMainApplication(), iwc.getCurrentLocale());
}
private IWMainApplication getIWMainApplication() {
return IWMainApplication.getDefaultIWMainApplication();
}
/**
* <p>Takes property from /workspace/developer/applicationproperties named
* "is_developement_mode". Check this property, when you need to add code
* necessary for development, but useless to production environment.</p>
* @return <code>true</code> if it is developing environment,
* <code>false</code> otherwise.
* @see CoreConstants#DEVELOPEMENT_STATE_PROPERTY
* @author <a href="mailto:martynas@idega.com">Martynas StakÄ—</a>
*/
protected boolean isDevelopementState() {
return !DefaultIWBundle.isProductionEnvironment();
}
}