Package de.timefinder.core.ui.form

Source Code of de.timefinder.core.ui.form.EventMasterDetailView

/*
*  Copyright 2009 Peter Karich.
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*  under the License.
*/
package de.timefinder.core.ui.form;

import de.timefinder.data.DataPool;
import de.timefinder.data.Event;
import de.timefinder.data.Feature;
import de.timefinder.data.Location;
import de.timefinder.data.Person;
import de.timefinder.data.access.Dao;
import de.timefinder.core.ui.metadata.PoolDescriptor;
import de.timefinder.core.ui.planner.HtmlPlannerComponent;
import de.timefinder.data.Resource;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.springframework.binding.form.HierarchicalFormModel;
import org.springframework.binding.value.ValueModel;
import org.springframework.binding.value.support.ObservableList;
import org.springframework.binding.value.support.ValueHolder;
import org.springframework.richclient.command.AbstractCommand;
import org.springframework.richclient.command.CommandGroup;
import org.springframework.richclient.components.ShuttleList;
import org.springframework.richclient.form.AbstractDetailForm;
import org.springframework.richclient.form.binding.swing.SwingBindingFactory;
import org.springframework.richclient.form.builder.TableFormBuilder;

/**
* @see how to set up a shuttle list:
* http://opensource.atlassian.com/confluence/spring/display/RCP/Contributions#Contributions-FrameworkExtensions
* @author Peter Karich
*/
public class EventMasterDetailView extends TimeFinderMasterDetailView<Event> {

    @Override
    public CollectionMasterDetailForm<Event> createForm(Dao<Event> dao, String[] columns) {
        final DataPool pool = ((PoolDescriptor) getDescriptor()).getDataPool();
        return new CollectionMasterDetailForm<Event>(dao, columns) {

            @Override
            protected void printAction(Iterator<Event> iter) {
                final List<Event> events = new ArrayList<Event>();

                while (iter.hasNext()) {
                    events.add(iter.next());
                }

                Iterator<? extends Resource> resIter = Arrays.asList(new Resource() {

                    @Override
                    public Collection<Event> getEvents() {
                        return events;
                    }

                    @Override
                    public void addEvent(Event ev, boolean reverseAdd) {
                        throw new UnsupportedOperationException("Not supported yet.");
                    }

                    @Override
                    public boolean removeEvent(Event ev, boolean reverseRemove) {
                        throw new UnsupportedOperationException("Not supported yet.");
                    }

                    @Override
                    public String getName() {
                        return "Master Plan";
                    }

                    @Override
                    public void setName(String name) {
                        throw new UnsupportedOperationException("Not supported yet.");
                    }
                }).iterator();

                HtmlPlannerComponent.printResources(resIter, settings);
            }
           
            private EventForm objForm;

            @Override
            protected AbstractDetailForm createDetailForm(HierarchicalFormModel parentFormModel,
                    ValueModel valueHolder, ObservableList masterList) {
                objForm = new EventForm(parentFormModel,
                        "eventsDetails", valueHolder, masterList) {

                    @Override
                    protected void addTabs() {
                        SwingBindingFactory factory = (SwingBindingFactory) getBindingFactory();

                        getFormBuilder().add(factory.createBoundComboBox(
                                "location", pool.getDao(Location.class).getAll(), "name"));

                        TableFormBuilder builder = createTab(getMessage("persons.label"));

                        final Dao<Person> personDao = pool.getDao(Person.class);

                        /****************************************************************
                         * WARNING: it is important to wrap the (person) collection in
                         * another one (here ArrayList). Otherwise the changes
                         * to the dao will have direct effect to the value in ValueHolder
                         * and newValue.equals(oldValue) == true for every change!
                         ****************************************************************/
                        final ValueHolder personHolder = new ValueHolder(new ArrayList<Person>(personDao.getAll()));
                        //1. persons => Event.set and getPersons are necessary
                        //2. personDao.getAll() => all available persons
                        //3. name => prints the name as one list item
                        ShuttleList sl = (ShuttleList) builder.add(
                                factory.createBoundShuttleList("persons",
                                personHolder, "name"))[1];
                        sl.setVisibleRowCount(10);

                        TableFormBuilder fBuilder = createTab(getMessage("features.label"));
                        final Dao<Feature> featureDao = pool.getDao(Feature.class);
                        final ValueHolder featureHolder = new ValueHolder(new ArrayList<Feature>(featureDao.getAll()));
                        sl = (ShuttleList) fBuilder.add(factory.createBoundShuttleList("features",
                                featureHolder, null))[1];
                        sl.setVisibleRowCount(10);

                        // now notify ShuttleList when collection change to update the JList
                        personDao.addListener(new PropertyChangeListener() {

                            @Override
                            public void propertyChange(PropertyChangeEvent evt) {
                                if (Dao.ATTACH.equals(evt.getPropertyName())
                                        || Dao.ATTACH_ALL.equals(evt.getPropertyName())
                                        || Dao.DETACH.equals(evt.getPropertyName())
                                        || Dao.DETACH_ALL.equals(evt.getPropertyName())) {
                                    personHolder.setValue(new ArrayList<Person>(personDao.getAll()));
                                }
                            }
                        });

                        featureDao.addListener(new PropertyChangeListener() {

                            @Override
                            public void propertyChange(PropertyChangeEvent evt) {
                                if (Dao.ATTACH.equals(evt.getPropertyName())
                                        || Dao.ATTACH_ALL.equals(evt.getPropertyName())
                                        || Dao.DETACH.equals(evt.getPropertyName())
                                        || Dao.DETACH_ALL.equals(evt.getPropertyName())) {
                                    featureHolder.setValue(new ArrayList<Feature>(featureDao.getAll()));
                                }
                            }
                        });
                    }
                };
                objForm.setDao(dao);
                objForm.setSettings(settings);

                return objForm;
            }
//            @Override
//            protected void updateControlsForState() {
//                super.updateControlsForState();
////                unassignButton.setEnabled(getDetailForm().getSelectedIndex() >= 0);
//                // Hack: in AbstractDaoForm we make the protected method public
//                unassignButton.setEnabled(((AbstractDaoForm) getDetailForm()).getEditingFormObjectIndex() >= 0);
//            }
//
//            public AbstractCommand getUnassignCommand() {
//                if (unassignCommand == null) {
//                    unassignCommand = new ActionCommand("unassignCommand") {
//
//                        @Override
//                        protected void doExecuteCommand() {
//                            if (getDetailForm().getSelectedIndex() >= 0) {
//                                Event ev = (Event) ((ObservableEventList) getFormObject()).get(getDetailForm().getSelectedIndex());
//                                ev.setAssigned(false);
//                                // here start=-1 will be overridden!!
//                                getDetailForm().commit();
//                            }
//                        }
//                    };
////            unassignCommand.setSecurityControllerId(getUnassignSecurityControllerId());
////            attachFormGuard(unassignCommand, FormGuard.ON_NOERRORS);
//                    return (ActionCommand) getCommandConfigurer().configure(unassignCommand);
//                }
//                return unassignCommand;
//            }
//
//            @Override
//            protected CommandGroup getCommandGroup() {
//                if (newCommandGroup == null) {
//                    newCommandGroup = CommandGroup.createCommandGroup(null,
//                            new AbstractCommand[]{getUnassignCommand(), getDeleteCommand(),
//                                getNewFormObjectCommand()});
//
//                }
//                return newCommandGroup;
//            }
        };
    }
}
TOP

Related Classes of de.timefinder.core.ui.form.EventMasterDetailView

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.