package com.idega.builder.presentation;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.myfaces.component.html.ext.HtmlInputTextarea;
import com.idega.block.web2.business.Web2Business;
import com.idega.builder.business.BuilderConstants;
import com.idega.builder.business.BuilderLogic;
import com.idega.builder.business.HtmlTemplateGrabber;
import com.idega.core.builder.data.ICPage;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.Layer;
import com.idega.presentation.Page;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextInput;
import com.idega.presentation.ui.Window;
import com.idega.util.PresentationUtil;
import com.idega.webface.WFUtil;
/**
* Title: idegaclasses Description: Copyright: Copyright (c) 2001 Company: idega
*
* @author <a href="tryggvi@idega.is">Tryggvi Larusson</a>
* @version 1.0
*/
public class IBSourceView extends Window {
private static final String SOURCE_PARAMETER = "ib_page_source";
private static final String IB_SOURCE_ACTION = "ib_page_source_action";
private static final String IB_PAGE_FORMAT = "ib_page_fomat";
private static final String PARAM_TEMPLATEURL = "templateurl";
public IBSourceView() {
setWidth(700);
setHeight(600);
}
@Override
public void main(IWContext iwc) {
setPrintScriptSourcesDirectly(false);
this.setStyleAttribute("margin:0px;overflow:hidden;background-color:#ffffff;");
Layer sourceView = new Layer();
sourceView.setStyleClass("sourceView");
add(sourceView);
IWBundle iwb = this.getBundle(iwc);
Web2Business web2 = WFUtil.getBeanInstance(iwc, Web2Business.SPRING_BEAN_IDENTIFIER);
sourceView.add(PresentationUtil.getJavaScriptSourceLine(web2.getCodePressScriptFilePath()));
PresentationUtil.addStyleSheetToHeader(iwc, iwb.getVirtualPathWithFileNameString("style/builder.css"));
String action = iwc.getParameter(IB_SOURCE_ACTION);
if (action != null) {
if (action.equals("update")) {
try {
String stringRep = iwc.getParameter(SOURCE_PARAMETER);
if (stringRep != null) {
String format = iwc.getParameter(IB_PAGE_FORMAT);
doPageSourceUpdate(stringRep, format, iwc);
}
}
catch (Exception e) {
add("Error when saving: " + e.getMessage());
e.printStackTrace();
}
}
else if (action.equals("grab")) {
try {
String sUrl = iwc.getParameter(PARAM_TEMPLATEURL);
if (sUrl != null && !"".equals(sUrl)) {
doPageTemplateGrab(sUrl, iwc);
this.setParentToReload();
}
}
catch (Exception e) {
add("Error when grabbing: " + e.getMessage());
e.printStackTrace();
}
}
}
IWResourceBundle iwrb = this.getResourceBundle(iwc);
Layer sourceViewButtonsLeft = new Layer();
sourceViewButtonsLeft.setStyleClass("sourceViewButtonsLeft");
Layer sourceViewButtonsRight = new Layer();
sourceViewButtonsRight.setStyleClass("sourceViewButtonsRight");
//temporary hack for opera and safari to fix their flawed handling of css height attribute
boolean isFubarBrowserForNow = iwc.isSafari() || iwc.isOpera();
if(isFubarBrowserForNow){
this.setDoctype(Page.DOCTYPE_HTML_4_0_1_TRANSITIONAL);
sourceViewButtonsLeft.setStyleAttribute("height", "15%");
sourceViewButtonsRight.setStyleAttribute("height", "15%");
}
Form form = new Form();
try {
String pageKey = getCurrentPageKey(iwc);
String source = pageKey == null ? BuilderLogic.getInstance().getPageSource(iwc) : BuilderLogic.getInstance().getPageSource(pageKey);
HtmlInputTextarea area = new HtmlInputTextarea();
area.setId(SOURCE_PARAMETER);
area.setWrap("OFF");
//enable syntax coloring!
area.setStyleClass("codepress html linenumbers-on");
if(isFubarBrowserForNow){
area.setStyle("height: 83%");
}
area.setValue(source);
form.add(area);
}
catch (Exception e) {
e.printStackTrace();
}
form.add(sourceViewButtonsLeft);
form.add(sourceViewButtonsRight);
//right
String templateString = iwrb.getLocalizedString("sourceview.template_text","HTML template regions are defined like so:<br/><code><!-- TemplateBeginEditable name=\"MyUniqueRegionId1\" --><br/>MyUniqueRegionId1<br/><!-- TemplateEndEditable --></code>");
Text templateText = new Text(templateString);
templateText.setStyleClass("helpText");
sourceViewButtonsRight.add(templateText);
SubmitButton button = new SubmitButton("Save", IB_SOURCE_ACTION, "update");
button.setAccessKey("s");
sourceViewButtonsRight.add(button);
DropdownMenu menu = getFormatDropdown(iwc);
sourceViewButtonsRight.add(menu);
//left
TextInput templateGrabInput = new TextInput(PARAM_TEMPLATEURL,"http://");
sourceViewButtonsLeft.add(templateGrabInput);
SubmitButton templateGrabButton = new SubmitButton(iwrb.getLocalizedString("sourceview.grab_button_text","Grab template from URL"), IB_SOURCE_ACTION, "grab");
sourceViewButtonsLeft.add(templateGrabButton);
String templateGrabString = iwrb.getLocalizedString("sourceview.grab_warning","Warning: Grabbing the url will get the html and write over this template and change its type to HTML");
Text grabText = new Text(templateGrabString);
grabText.setStyleClass("helpText");
sourceViewButtonsLeft.add(grabText);
sourceView.add(form);
}
private String getCurrentPageKey(IWContext iwc) {
return iwc.getParameter("pageForSourceId");
}
private void doPageSourceUpdate(String sourceString, String pageFormat, IWContext iwc) throws Exception {
String pageKey = getCurrentPageKey(iwc);
if (pageKey == null) {
getBuilderLogic().setPageSource(iwc, pageFormat, sourceString);
return;
}
getBuilderLogic().setPageSource(pageKey, pageFormat, sourceString);
}
private void doPageTemplateGrab(String url, IWContext iwc) throws Exception {
String pageKey = getBuilderLogic().getCurrentIBPage(iwc);
new HtmlTemplateGrabber(url, pageKey);
}
public DropdownMenu getFormatDropdown(IWContext iwc) {
ICPage page;
// The default format:
String pageFormat = getBuilderLogic().getDefaultPageFormat();
try {
page = getBuilderLogic().getCurrentIBPageEntity(iwc);
pageFormat = page.getFormat();
}
catch (Exception e) {
e.printStackTrace();
}
DropdownMenu menu = new DropdownMenu(IB_PAGE_FORMAT);
Map formats = getBuilderLogic().getPageFormatsSupportedAndDescription();
Set keySet = formats.keySet();
for (Iterator iter = keySet.iterator(); iter.hasNext();) {
String format = (String) iter.next();
String description = (String) formats.get(format);
menu.addMenuElement(format,description);
}
menu.setSelectedElement(pageFormat);
return menu;
}
protected BuilderLogic getBuilderLogic() {
return BuilderLogic.getInstance();
}
@Override
public String getBundleIdentifier(){
return BuilderConstants.IW_BUNDLE_IDENTIFIER;
}
}