diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/AbstractTextUploadForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/AbstractTextUploadForm.java deleted file mode 100644 index 4839dbaae..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/AbstractTextUploadForm.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright (C) 2019 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.cms.ui.contenttypes; - -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.RequestLocal; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.event.FormInitListener; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.FormValidationListener; -import com.arsdigita.bebop.form.FormErrorDisplay; -import com.arsdigita.bebop.parameters.NotNullValidationListener; -import com.arsdigita.bebop.util.GlobalizationUtil; -import com.arsdigita.cms.ItemSelectionModel; -import com.arsdigita.cms.ui.FileUploadSection; -import com.arsdigita.globalization.Globalization; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.UncheckedWrapperException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.awt.image.Kernel; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; - -import javax.activation.MimeType; - -/** - * - * @author Jens Pelzetter - */ -/** - *

- * An abstract base form for uploading Texts. The code of this class has been - * extracted from {@link TextAssetBody}, the form for editing an TextAsset (used - * for example for Article). The TextAsset has the disadvantage of storing its - * information in a separate table, so that information of a content item is - * spread over several tables. - *

- *

- * To use this form, define a property for your object which has the Java type - * String and the database type CLOB, like this: - *

- *
- * String[0..1] text = ct_yourContenttype.text CLOB
- * 
- *

- * To use this form your have to overwrite three methods: - *

- * - *
  • - * Of course, you have to add your form to a property step also, and write a - * simple constructor, which takes an {@link ItemSelectionModel} as parameter - * and passes it to the constructor of this class. - *
  • - * - * - * @author Jens Pelzetter - */ -public abstract class AbstractTextUploadForm - extends Form - implements FormInitListener, - FormProcessListener, - FormValidationListener { - - private static final Logger LOGGER = LogManager - .getLogger(AbstractTextUploadForm.class); - - private ItemSelectionModel itemModel; - private FileUploadSection fileUploadSection; - private SaveCancelSection saveCancelSection; - private RequestLocal fileUploadContent; - private RequestLocal fileUploadContentUsedInso; - - public AbstractTextUploadForm(final ItemSelectionModel itemModel) { - super("sciprojectUploadDescFrom", new BoxPanel(BoxPanel.VERTICAL)); - this.itemModel = itemModel; - setMethod(Form.POST); - setEncType("multipart/form-data"); - this.fileUploadContent = new RequestLocal(); - this.fileUploadContentUsedInso = new RequestLocal(); - addWidgets(); - } - - //Abstract methods to overwrite - /** - * The return value of this method is used as label for the upload form. - * - * @return The label for the upload form. - */ - public abstract GlobalizedMessage getLabelText(); - - /** - * The return value of this method is used as label for the MimeType field. - * - * @return The label for the MimeType field. - */ - public abstract GlobalizedMessage getMimeTypeLabel(); - - /** - *

    - * This method is called to pass the uploaded text to the edited object. In - * the method, you have to retrieve the current selected object from the - * itemModel parameter and call the appropriate - * set of your class, and its save method. An simple example: - *

    - *
    -     * @Override
    -     * public void setText(ItemSelectionModel itemModel,
    -     *                     PageState state,
    -     *                     String text) {
    -     *   YourContentType obj = (YourContentType) itemModel.getSelectedObject(state);
    -     *   obj.setText(text);
    -     *   obj.save();
    -     * }
    -     * 
    - * - * @param itemModel The {@link ItemSelectionModel} used by the form. - * @param state The current {@link PageState}. - * @param text The uploaded text. - */ - public abstract void setText(ItemSelectionModel itemModel, - PageState state, - String text); - - protected void addWidgets() { - add(new Label(getLabelText())); - fileUploadSection = new FileUploadSection( - getMimeTypeLabel(), - "mime", - "text/plain"); - fileUploadSection.getFileUploadWidget().addValidationListener( - new NotNullValidationListener()); - fileUploadSection.getMimeTypeWidget().setDefaultValue( - FileUploadSection.GUESS_MIME); - add(fileUploadSection); - - saveCancelSection = new SaveCancelSection(); - add(saveCancelSection); - - add(new FormErrorDisplay(this)); - - addValidationListener(this); - addProcessListener(this); - } - - /** - * @return the save/cancel section for this form - */ - public SaveCancelSection getSaveCancelSection() { - return saveCancelSection; - } - - @Override - public void init(final FormSectionEvent event) throws FormProcessException { - final PageState state = event.getPageState(); - - setVisible(state, true); - } - - /** - * Validate file upload - * - * @param event - * - * @throws FormProcessException - */ - @Override - public void validate(final FormSectionEvent event) throws - FormProcessException { - - final MimeType mime = fileUploadSection.getMimeType(event); - boolean textType = mime.getPrimaryType().equals("text"); - - validateFileType(mime, textType); - - // Convert the file to HTML, if possible - final File file = fileUploadSection.getFile(event); - byte[] file_bytes = readFileBytes(file); - boolean[] used_inso = new boolean[1]; - String file_content = convertBytes(file_bytes, textType, used_inso); - - if ("text/html".equals(mime.toString())) { - file_content = extractHTMLBody(file_content); - } - - final PageState state = event.getPageState(); - fileUploadContent.set(state, file_content); - fileUploadContentUsedInso.set(state, used_inso[0]); - } - - @Override - public void process(final FormSectionEvent event) - throws FormProcessException { - LOGGER.debug("Processing upload..."); - final PageState state = event.getPageState(); - //File file = fileUploadSection.getFile(fse); - //SciProject project = (SciProject) itemModel.getSelectedObject(state); - - final String uploadContent = (String) fileUploadContent.get(state); - //boolean usedInso = (Boolean) fileUploadContentUsedInso.get(state); - - LOGGER.debug(String.format("Setting project description to: %s", - uploadContent)); - //project.setProjectDescription(uploadContent); - LOGGER.debug("Saving project."); - //project.save(); - setText(itemModel, state, uploadContent); - } - - private void validateFileType(final MimeType mime, final boolean textType) - throws FormProcessException { - - boolean validType = textType; - - if (!validType) { - throw new FormProcessException(GlobalizationUtil.globalize( - "cms.ui.authoring.invalid_file_type")); - } - } - - /** - * read in the content of the file (in bytes). - */ - private byte[] readFileBytes(final File file) throws FormProcessException { - final byte[] fileBytes; - try (FileInputStream fileInputStream = new FileInputStream(file)) { - fileBytes = new byte[fileInputStream.available()]; - fileInputStream.read(fileBytes); - } catch (IOException ex) { - throw new FormProcessException(GlobalizationUtil.globalize( - "cms.ui.authoring.unable_to_load_file")); - } - return fileBytes; - } - - /** - * Convert bytes to String, possibly using INSO filter to convert to HTML - * type - */ - private String convertBytes(final byte[] fileBytes, - final boolean textType, - final boolean[] usedInso) - throws FormProcessException { - - return new String(fileBytes, StandardCharsets.UTF_8); - } - - /** - * Extract the contents of the html Body tag. (Done to prevent base and - * other header tags from interfering with page display). - */ - private String extractHTMLBody(final String htmlText) - throws FormProcessException { - - final String lc = htmlText.toLowerCase(); - final int bodyStart = lc.indexOf("", bodyStart); - final int bodyEnd = lc.indexOf("", bodyStart_v); - if (bodyStart == -1 || bodyEnd == -1) { - throw new FormProcessException(GlobalizationUtil.globalize( - "cms.ui.authoring.html_file_missing_body_tags")); - } - return htmlText.substring(bodyStart_v + 1, bodyEnd); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/EventCreateForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/EventCreateForm.java deleted file mode 100644 index 2dcfe31bd..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/EventCreateForm.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2017 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.cms.ui.contenttypes; - -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.form.Date; -import com.arsdigita.bebop.parameters.NotEmptyValidationListener; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.cms.ItemSelectionModel; -import com.arsdigita.cms.ui.authoring.CreationSelector; -import com.arsdigita.cms.ui.authoring.PageCreateForm; -import com.arsdigita.globalization.GlobalizedMessage; - -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentItemInitializer; -import org.librecms.contenttypes.Event; - -/** - * - * @author Jens Pelzetter - */ -public class EventCreateForm extends PageCreateForm { - - private static final String START_DATE = "startDate"; - - private Date startDate; - - public EventCreateForm(final ItemSelectionModel itemSelectionModel, - final CreationSelector creationSelector, - final StringParameter selectedLanguageParam) { - - super(itemSelectionModel, creationSelector, selectedLanguageParam); - } - - @Override - protected void addWidgets() { - - super.addWidgets(); - - add(new Label(new GlobalizedMessage( - "cms.contenttypes.ui.event.start_date", - CmsConstants.CMS_BUNDLE))); - startDate = new Date(START_DATE); - startDate.addValidationListener(new NotEmptyValidationListener()); - add(startDate); - } - - @Override - protected ContentItemInitializer getItemInitializer( - final FormData data, final PageState state) { - - return item -> ((Event) item) - .setStartDate((java.util.Date) startDate.getValue(state)); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/NewsCreateForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/NewsCreateForm.java deleted file mode 100644 index 89f314ade..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/NewsCreateForm.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2017 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.cms.ui.contenttypes; - -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.form.Date; -import com.arsdigita.bebop.parameters.NotEmptyValidationListener; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.cms.ItemSelectionModel; -import com.arsdigita.cms.ui.authoring.CreationSelector; -import com.arsdigita.cms.ui.authoring.PageCreateForm; -import com.arsdigita.globalization.GlobalizedMessage; - -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentItemInitializer; -import org.librecms.contenttypes.News; - -/** - * - * @author Jens Pelzetter - */ -public class NewsCreateForm extends PageCreateForm { - - private static final String NEWS_DATE = "newsDate"; - - private Date newsDate; - - public NewsCreateForm(final ItemSelectionModel itemSelectionModel, - final CreationSelector creationSelector, - final StringParameter selectedLanguageParam) { - - super(itemSelectionModel, creationSelector, selectedLanguageParam); - } - - @Override - protected void addWidgets() { - - super.addWidgets(); - - add(new Label(new GlobalizedMessage("cms.contenttypes.ui.newsitem.date", - CmsConstants.CMS_BUNDLE))); - newsDate = new Date(NEWS_DATE); - newsDate.addValidationListener(new NotEmptyValidationListener()); - add(newsDate); - } - - @Override - protected ContentItemInitializer getItemInitializer( - final FormData data, final PageState state) { - - return item -> ((News) item) - .setReleaseDate((java.util.Date) newsDate.getValue(state)); - } - -}