Package org.projectforge.web.scripting

Source Code of org.projectforge.web.scripting.ScriptingForm

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.web.scripting;

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.lang.Bytes;
import org.projectforge.fibu.kost.reporting.Report;
import org.projectforge.fibu.kost.reporting.ReportStorage;
import org.projectforge.scripting.GroovyResult;
import org.projectforge.scripting.ScriptDO;
import org.projectforge.web.HtmlHelper;
import org.projectforge.web.fibu.ReportScriptingStorage;
import org.projectforge.web.wicket.AbstractStandardForm;
import org.projectforge.web.wicket.components.AceEditorPanel;
import org.projectforge.web.wicket.components.SingleButtonPanel;
import org.projectforge.web.wicket.flowlayout.DivPanel;
import org.projectforge.web.wicket.flowlayout.DivTextPanel;
import org.projectforge.web.wicket.flowlayout.FieldsetPanel;
import org.projectforge.web.wicket.flowlayout.FileUploadPanel;
import org.projectforge.web.wicket.flowlayout.Heading1Panel;
import org.springframework.util.CollectionUtils;

public class ScriptingForm extends AbstractStandardForm<ScriptDO, ScriptingPage>
{
  private static final long serialVersionUID = 1868796548657011785L;

  protected FileUploadField fileUploadField;

  private String reportPathHeading;

  private DivPanel reportPathPanel;

  public ScriptingForm(final ScriptingPage parentPage)
  {
    super(parentPage);
    initUpload(Bytes.megabytes(1));
  }

  @Override
  @SuppressWarnings("serial")
  protected void init()
  {
    super.init();
    gridBuilder.newGridPanel();
    reportPathPanel = gridBuilder.getPanel();
    reportPathPanel.add(new Heading1Panel(reportPathPanel.newChildId(), new Model<String>() {
      /**
       * @see org.apache.wicket.model.Model#getObject()
       */
      @Override
      public String getObject()
      {
        return reportPathHeading;
      }
    }));
    gridBuilder.newGridPanel();
    {
      final FieldsetPanel fs = gridBuilder.newFieldset(getString("file"), "*.xsl, *.jrxml");
      fileUploadField = new FileUploadField(FileUploadPanel.WICKET_ID);
      fs.add(new DivTextPanel(fs.newChildId(), new Model<String>() {
        @Override
        public String getObject()
        {
          final ReportScriptingStorage storage = getReportScriptingStorage();
          return storage != null ? storage.getLastAddedFilename() : "";
        }
      }));
      fs.add(new FileUploadPanel(fs.newChildId(), fileUploadField));
      final Button uploadButton = new Button(SingleButtonPanel.WICKET_ID, new Model<String>("upload")) {
        @Override
        public final void onSubmit()
        {
          parentPage.upload();
        }
      };
      fs.add(new SingleButtonPanel(fs.newChildId(), uploadButton, getString("upload"), SingleButtonPanel.NORMAL));
    }
    {
      final FieldsetPanel fs = gridBuilder.newFieldset(getString("label.groovyScript"));
      final AceEditorPanel textArea = new AceEditorPanel(fs.newChildId(), new PropertyModel<String>(this, "groovyScript"));
      fs.add(textArea);
    }
    {
      final FieldsetPanel fs = gridBuilder.newFieldset(getString("label.groovy.result")).suppressLabelForWarning();
      final DivTextPanel groovyResultPanel = new DivTextPanel(fs.newChildId(), new Model<String>() {
        /**
         * @see org.apache.wicket.model.Model#getObject()
         */
        @Override
        public String getObject()
        {
          final GroovyResult groovyResult = parentPage.groovyResult;
          final StringBuffer buf = new StringBuffer();
          buf.append(groovyResult.getResultAsHtmlString());
          if (groovyResult.getResult() != null && StringUtils.isNotEmpty(groovyResult.getOutput()) == true) {
            buf.append("<br/>\n");
            buf.append(HtmlHelper.escapeXml(groovyResult.getOutput()));
          }
          return buf.toString();
        }
      }) {
        /**
         * @see org.apache.wicket.Component#isVisible()
         */
        @Override
        public boolean isVisible()
        {
          final GroovyResult groovyResult = parentPage.groovyResult;
          return (groovyResult != null && groovyResult.hasResult() == true);
        }
      };
      groovyResultPanel.getLabel().setEscapeModelStrings(false);
      fs.add(groovyResultPanel);
    }
    {
      final Button executeButton = new Button(SingleButtonPanel.WICKET_ID, new Model<String>("execute")) {
        @Override
        public final void onSubmit()
        {
          parentPage.execute();
        }
      };
      final SingleButtonPanel executeButtonPanel = new SingleButtonPanel(actionButtons.newChildId(), executeButton, getString("execute"),
          SingleButtonPanel.DEFAULT_SUBMIT);
      actionButtons.add(executeButtonPanel);
      setDefaultButton(executeButton);
    }
  }

  @Override
  public void onBeforeRender()
  {
    final ReportStorage reportStorage = parentPage.getReportStorage();
    final Report currentReport = reportStorage != null ? reportStorage.getCurrentReport() : null;
    final String reportPathHeading = getReportPath(currentReport);
    if (reportPathHeading != null) {
      reportPathPanel.setVisible(true);
    } else {
      reportPathPanel.setVisible(false);
    }
    super.onBeforeRender();
  }

  private String getReportPath(final Report report)
  {
    if (report == null) {
      return null;
    }
    final List<Report> ancestorList = report.getPath();
    if (CollectionUtils.isEmpty(ancestorList) == true) {
      return null;
    }
    final StringBuffer buf = new StringBuffer();
    for (final Report ancestor : ancestorList) {
      buf.append(ancestor.getId()).append(" -> ");
    }
    buf.append(report.getId());
    return buf.toString();
  }

  public String getGroovyScript()
  {
    return getReportScriptingStorage().getGroovyScript();
  }

  public void setGroovyScript(final String groovyScript)
  {
    getReportScriptingStorage().setGroovyScript(groovyScript);
  }

  private ReportScriptingStorage getReportScriptingStorage()
  {
    return parentPage.getReportScriptingStorage();
  }
}
TOP

Related Classes of org.projectforge.web.scripting.ScriptingForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.