gr.abiss.calipso.wicket.space.panel.SpacePanelLanguageSupport.java Source code

Java tutorial

Introduction

Here is the source code for gr.abiss.calipso.wicket.space.panel.SpacePanelLanguageSupport.java

Source

/*
 * Copyright (c) 2007 - 2010 Abiss.gr <info@abiss.gr>  
 *
 *  This file is part of Calipso, a software platform by www.Abiss.gr.
 *
 *  Calipso is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU Affero General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version.
 * 
 *  Calipso 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 Affero General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License 
 *  along with Calipso. If not, see http://www.gnu.org/licenses/agpl.html
 */

package gr.abiss.calipso.wicket.space.panel;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.apache.wicket.Application;
import org.apache.wicket.extensions.breadcrumb.IBreadCrumbModel;
import org.apache.wicket.extensions.breadcrumb.panel.BreadCrumbPanel;
import org.apache.wicket.extensions.breadcrumb.panel.IBreadCrumbPanelFactory;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.form.SimpleFormComponentLabel;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;

import gr.abiss.calipso.domain.ItemRenderingTemplate;
import gr.abiss.calipso.domain.Language;
import gr.abiss.calipso.domain.Metadata;
import gr.abiss.calipso.domain.RoleSpaceStdField;
import gr.abiss.calipso.domain.Space;
import gr.abiss.calipso.domain.SpaceRole;
import gr.abiss.calipso.util.BreadCrumbUtils;
import gr.abiss.calipso.util.SpaceUtils;
import gr.abiss.calipso.wicket.BasePanel;
import gr.abiss.calipso.wicket.CalipsoFeedbackMessageFilter;
import gr.abiss.calipso.wicket.ConfirmPanel;
import gr.abiss.calipso.wicket.CalipsoApplication;
import gr.abiss.calipso.wicket.ErrorHighlighter;
import gr.abiss.calipso.wicket.SpaceFormPanel;
import gr.abiss.calipso.wicket.SpacePermissionsPanel;
import gr.abiss.calipso.wicket.form.AbstractSpaceform;

/**
 *
 */
public class SpacePanelLanguageSupport extends BasePanel {

    private static final long serialVersionUID = 1L;

    private static final Logger logger = Logger.getLogger(SpacePanelLanguageSupport.class);

    private Space space;
    private boolean isEdit;

    /**
     * @param id
     * @param breadCrumbModel
     */
    public SpacePanelLanguageSupport(String id) {
        this(id, null, null);
    }

    public SpacePanelLanguageSupport(String id, IBreadCrumbModel breadCrumbModel) {
        this(id, breadCrumbModel, null);
    }

    public SpacePanelLanguageSupport(String id, IBreadCrumbModel breadCrumbModel, Space space) {
        super(id, breadCrumbModel);

        isEdit = space != null;
        if (!isEdit) {
            space = new Space();
            this.getCalipso().storeUnpublishedSpace(space);
            space.setItemRenderingTemplates(new LinkedList<ItemRenderingTemplate>());
        } else {
            List<ItemRenderingTemplate> tmplList = this.getCalipso().getItemRenderingTemplates(space);
            space.setItemRenderingTemplates(tmplList);
        }
        // init lazy roles collection
        List<SpaceRole> roleList = getCalipso().findSpaceRolesForSpace(space);
        Set<SpaceRole> spaceRolesSet = new HashSet<SpaceRole>();
        if (roleList != null && !roleList.isEmpty()) {
            spaceRolesSet.addAll(roleList);
            for (SpaceRole spaceRole : roleList) {
                spaceRole.setItemRenderingTemplates(getCalipso().loadSpaceRoleTemplates(spaceRole.getId()));
            }
        }
        space.setSpaceRoles(spaceRolesSet);

        //SpaceUtils.initSpaceSpaceRoles(getCalipso(), space);
        this.space = space;
        add(new SpaceForm("form", this.space));
        getBackLinkPanel().makeCancel();
    }

    private class SpaceForm extends AbstractSpaceform {

        private static final long serialVersionUID = 1L;
        private CalipsoFeedbackMessageFilter filter;

        /**
         * @param id
         */
        public SpaceForm(String id, final Space space) {
            super(id, space);
            FeedbackPanel feedback = new FeedbackPanel("feedback");
            filter = new CalipsoFeedbackMessageFilter();
            feedback.setFilter(filter);
            add(feedback);
            // palette
            List<Language> languages = new ArrayList<Language>(
                    new LinkedHashSet<Language>(getCalipso().getSupportedLanguages()));
            Language defaultApplicationLanguage = null;
            String defaultLocale = getCalipso().getDefaultLocale();
            for (Language language : languages) {
                if (language.getId().equals(defaultLocale)) {
                    defaultApplicationLanguage = language;
                    break;
                }
            }

            List<Language> spaceLanguages = space.getSupportedLanguages();
            if (!spaceLanguages.contains(defaultApplicationLanguage)) {
                spaceLanguages.add(defaultApplicationLanguage);
            }
            Palette supportedLanguages = new Palette("space.supportedLanguages",
                    new PropertyModel(space, "supportedLanguages"), new Model((Serializable) languages),
                    new IChoiceRenderer() {

                        private static final long serialVersionUID = 1L;

                        public Object getDisplayValue(Object object) {
                            Language lang = (Language) object;
                            return (lang.getId() + " - " + localize("language." + lang.getId()));
                        }

                        public String getIdValue(Object object, int index) {
                            Language lang = (Language) object;
                            return lang.getId();
                        }

                    }, 10, true);
            // must choose at least one
            /*
            supportedLanguages.getRecorderComponent().setRequired(true);
            supportedLanguages.getRecorderComponent().add(new IValidator(){
                
               public void validate(IValidatable validatable) {
                  logger.debug("validatable value: "+validatable.getValue());
                      
               }
                   
            });*/
            add(supportedLanguages);
            add(new Label("space.supportedLanguagesLabel", new ResourceModel("space_form.spaceSupportedLanguages"))
                    .setRenderBodyOnly(true));

            // date formats
            //         @SuppressWarnings("serial")
            ListView<String> dateFormatsListView = new ListView<String>("dateFormatsListView",
                    Metadata.DATE_FORMAT_KEYS) {
                protected void populateItem(ListItem<String> dateformatKeyItem) {
                    String dfKey = (String) dateformatKeyItem.getModelObject();
                    //logger.info("DATEFORMAT Model string: "+"dateFormats["+dfKey+"]");
                    // date format field
                    TextField<String> dateFormatField = new TextField<String>("dateFormatField",
                            new PropertyModel<String>(space.getMetadata(), "dateFormats[" + dfKey + "]"));
                    dateFormatField.setRequired(true);
                    dateFormatField.add(new ErrorHighlighter());
                    dateformatKeyItem.add(dateFormatField);
                    // date format label
                    dateFormatField.setLabel(new ResourceModel("space_form.dateFormat." + dfKey));
                    dateformatKeyItem.add(new SimpleFormComponentLabel("dateFormatLabel", dateFormatField));
                }
            };
            add(dateFormatsListView);

            deleteLink(space);

        }

        /**
         * @see org.apache.wicket.markup.html.form.Form#onSubmit()
         */
        @Override
        protected void onSubmit() {
            activate(new IBreadCrumbPanelFactory() {

                private static final long serialVersionUID = 1L;

                public BreadCrumbPanel create(String componentId, IBreadCrumbModel breadCrumbModel) {

                    return new SpaceFormPanel(componentId, getBreadCrumbModel(), space);
                }

            });
        }

    }

    private void deleteLink(final Space space) {

        boolean canBeDeleted = Boolean.parseBoolean(
                ((CalipsoApplication) Application.get()).getCalipsoPropertyValue("allow.delete.customField"))
                && isEdit;
        if (!canBeDeleted) {
            add(new WebMarkupContainer("delete").setVisible(false));
        } else {
            add(new Link("delete") {

                private static final long serialVersionUID = 1L;

                @Override
                public void onClick() {
                    final String heading = localize("space_delete.confirm");
                    final String warning = localize("space_delete.line3");
                    final String line1 = localize("space_delete.line1");
                    final String line2 = localize("space_delete.line2");

                    activate(new IBreadCrumbPanelFactory() {

                        private static final long serialVersionUID = 1L;

                        public BreadCrumbPanel create(String componentId, final IBreadCrumbModel breadCrumbModel) {
                            ConfirmPanel confirm = new ConfirmPanel(componentId, breadCrumbModel, heading, warning,
                                    new String[] { line1, line2 }) {

                                private static final long serialVersionUID = 1L;

                                public void onConfirm() {
                                    getCalipso().removeSpace(space);
                                    SpacePanelLanguageSupport.this.refreshPrincipal();
                                    BreadCrumbUtils.removePreviousBreadCrumbPanel(breadCrumbModel);
                                    activate(new IBreadCrumbPanelFactory() {

                                        private static final long serialVersionUID = 1L;

                                        public BreadCrumbPanel create(String componentId,
                                                IBreadCrumbModel breadCrumbModel) {
                                            return (BreadCrumbPanel) breadCrumbModel.getActive();
                                        }
                                    });
                                }
                            };
                            return confirm;
                        }
                    });
                }
            });
        }
    }

    public String getTitle() {
        if (isEdit)
            return localize("space_form.titleEditLanguageSupport", localize(space.getNameTranslationResourceKey()));
        else
            return localize("space_form.titleCreateLanguageSupport");
    }

}