package org.jtheque.films.view.impl.panels.search; /* * Copyright JTheque (Baptiste Wicht) * * 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. */ import org.jtheque.core.managers.Managers; import org.jtheque.core.managers.language.ILanguageManager; import org.jtheque.core.utils.ui.builders.I18nPanelBuilder; import org.jtheque.core.utils.ui.builders.JThequePanelBuilder; import org.jtheque.films.services.able.IActorService; import org.jtheque.films.services.able.IRealizersService; import org.jtheque.films.services.impl.utils.search.DataSearcher; import org.jtheque.films.services.impl.utils.search.Searcher; import org.jtheque.films.services.impl.utils.search.filters.ActorFilter; import org.jtheque.films.services.impl.utils.search.filters.DurationFilter; import org.jtheque.films.services.impl.utils.search.filters.KindFilter; import org.jtheque.films.services.impl.utils.search.filters.LanguageFilter; import org.jtheque.films.services.impl.utils.search.filters.NoteFilter; import org.jtheque.films.services.impl.utils.search.filters.RealizerFilter; import org.jtheque.films.services.impl.utils.search.filters.TypeFilter; import org.jtheque.films.services.impl.utils.search.filters.YearFilter; import org.jtheque.films.utils.Constants.Properties.Film; import org.jtheque.films.view.impl.editors.DurationEditor; import org.jtheque.films.view.impl.models.spinner.SpinnerDurationModel; import org.jtheque.primary.od.able.Person; import org.jtheque.primary.od.able.SimpleData; import org.jtheque.primary.services.able.ISimpleDataService; import org.jtheque.primary.view.impl.models.DataContainerCachedComboBoxModel; import org.jtheque.primary.view.impl.models.NotesComboBoxModel; import org.jtheque.utils.ui.GridBagUtils; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.swing.JCheckBox; import javax.swing.JSpinner; import javax.swing.JTextField; /** * A search panel for films. * * @author Baptiste Wicht */ public final class JPanelFilmSearch extends JPanelSearch { private static final long serialVersionUID = 7108296888681550453L; private JCheckBox boxKind; private JCheckBox boxActor; private JCheckBox boxType; private JCheckBox boxYear; private JTextField fieldYearFrom; private JTextField fieldYearTo; private JCheckBox boxRealizer; private JCheckBox boxLanguage; private JCheckBox boxNote; private JCheckBox boxDuration; private JSpinner fieldDurationFrom; private JSpinner fieldDurationTo; private NotesComboBoxModel modelNotes; private DataContainerCachedComboBoxModel<SimpleData> modelKinds; private DataContainerCachedComboBoxModel<Person> modelActors; private DataContainerCachedComboBoxModel<SimpleData> modelTypes; private DataContainerCachedComboBoxModel<Person> modelRealizers; private DataContainerCachedComboBoxModel<SimpleData> modelLanguages; @Resource private ISimpleDataService typesService; @Resource private ISimpleDataService languagesService; @Resource private IRealizersService realizersService; @Resource private ISimpleDataService kindsService; @Resource private IActorService actorService; /** * Build the panel. */ @PostConstruct private void build() { I18nPanelBuilder builder = new JThequePanelBuilder(this); addKindChoice(builder); addActorChoice(builder); addTypeChoice(builder); addYearChoice(builder); addRealizerChoice(builder); addLanguageChoice(builder); addNoteChoice(builder); addDurationChoice(builder); } /** * Add the kind choice. * * @param builder The builder of the panel. */ private void addKindChoice(I18nPanelBuilder builder) { boxKind = builder.add(new JCheckBox(), builder.gbcSet(0, 0)); builder.addI18nLabel(Film.KIND, builder.gbcSet(1, 0)); modelKinds = new DataContainerCachedComboBoxModel<SimpleData>(kindsService); builder.addComboBox(modelKinds, builder.gbcSet(2, 0, GridBagUtils.NONE, 2, 1)); } /** * Add the actor choice. * * @param builder The builder of the panel. */ private void addActorChoice(I18nPanelBuilder builder) { boxActor = builder.add(new JCheckBox(), builder.gbcSet(0, 1)); builder.addI18nLabel(Film.ACTORS, builder.gbcSet(1, 1)); modelActors = new DataContainerCachedComboBoxModel<Person>(actorService); builder.addComboBox(modelActors, builder.gbcSet(2, 1, GridBagUtils.NONE, 2, 1)); } /** * Add the type choice. * * @param builder The builder of the panel. */ private void addTypeChoice(I18nPanelBuilder builder) { boxType = builder.add(new JCheckBox(), builder.gbcSet(0, 2)); builder.addI18nLabel(Film.TYPE, builder.gbcSet(1, 2)); modelTypes = new DataContainerCachedComboBoxModel<SimpleData>(typesService); builder.addComboBox(modelTypes, builder.gbcSet(2, 2, GridBagUtils.NONE, 2, 1)); } /** * Add the realizer choice. * * @param builder The builder of the panel. */ private void addRealizerChoice(I18nPanelBuilder builder) { boxRealizer = builder.add(new JCheckBox(), builder.gbcSet(0, 4)); builder.addI18nLabel(Film.REALIZER, builder.gbcSet(1, 4)); modelRealizers = new DataContainerCachedComboBoxModel<Person>(realizersService); builder.addComboBox(modelRealizers, builder.gbcSet(2, 4, GridBagUtils.NONE, 2, 1)); } /** * Add the language choice. * * @param builder The builder of the panel. */ private void addLanguageChoice(I18nPanelBuilder builder) { boxLanguage = builder.add(new JCheckBox(), builder.gbcSet(0, 5)); builder.addI18nLabel(Film.LANGUAGE, builder.gbcSet(1, 5)); modelLanguages = new DataContainerCachedComboBoxModel<SimpleData>(languagesService); builder.addComboBox(modelLanguages, builder.gbcSet(2, 5, GridBagUtils.NONE, 2, 1)); } /** * Add the note choice. * * @param builder The builder of the panel. */ private void addNoteChoice(I18nPanelBuilder builder) { boxNote = builder.add(new JCheckBox(), builder.gbcSet(0, 6)); builder.addI18nLabel(Film.NOTE, builder.gbcSet(1, 6)); modelNotes = new NotesComboBoxModel(daoNotes); builder.addComboBox(modelNotes, builder.gbcSet(2, 6, GridBagUtils.NONE, 2, 1)); } /** * Add the year choice. * * @param builder The builder of the panel. */ private void addYearChoice(I18nPanelBuilder builder) { boxYear = builder.add(new JCheckBox(), builder.gbcSet(0, 3)); builder.addI18nLabel(Film.YEAR, builder.gbcSet(1, 3)); fieldYearFrom = builder.add(new JTextField(4), builder.gbcSet(2, 3)); builder.addI18nLabel("search.film.to", builder.gbcSet(3, 3)); fieldYearTo = builder.add(new JTextField(4), builder.gbcSet(4, 3)); } /** * Add the duration choice. * * @param builder The builder of the panel. */ private void addDurationChoice(I18nPanelBuilder builder) { boxDuration = builder.add(new JCheckBox(), builder.gbcSet(0, 7)); builder.addI18nLabel(Film.DURATION, builder.gbcSet(1, 7)); fieldDurationFrom = new JSpinner(new SpinnerDurationModel("1:00")); fieldDurationFrom.setEditor(new DurationEditor(fieldDurationFrom)); builder.add(fieldDurationFrom, builder.gbcSet(2, 7)); builder.addI18nLabel("search.film.to", builder.gbcSet(3, 7)); fieldDurationTo = new JSpinner(new SpinnerDurationModel("2:00")); fieldDurationTo.setEditor(new DurationEditor(fieldDurationTo)); builder.add(fieldDurationTo, builder.gbcSet(4, 7)); } @Override public String getTitle() { return Managers.getManager(ILanguageManager.class).getMessage("search.film.title"); } @Override public Searcher<org.jtheque.films.persistence.od.able.Film> getSearcher() { Searcher<org.jtheque.films.persistence.od.able.Film> searcher = new DataSearcher<org.jtheque.films.persistence.od.able.Film>(); if (boxActor.isSelected()) { searcher.addFilter(new ActorFilter(modelActors.getSelectedData())); } if (boxKind.isSelected()) { searcher.addFilter(new KindFilter(modelKinds.getSelectedData())); } if (boxType.isSelected()) { searcher.addFilter(new TypeFilter(modelTypes.getSelectedData())); } if (boxRealizer.isSelected()) { searcher.addFilter(new RealizerFilter(modelRealizers.getSelectedData())); } if (boxLanguage.isSelected()) { searcher.addFilter(new LanguageFilter(modelLanguages.getSelectedData())); } if (boxNote.isSelected()) { searcher.addFilter(new NoteFilter<org.jtheque.films.persistence.od.able.Film>(modelNotes.getSelectedNote())); } if (boxYear.isSelected()) { searcher.addFilter(new YearFilter(Integer.parseInt(fieldYearFrom.getText()), Integer.parseInt(fieldYearTo.getText()))); } if (boxDuration.isSelected()) { searcher.addFilter(new DurationFilter( ((SpinnerDurationModel) fieldDurationFrom.getModel()).intValue(), ((SpinnerDurationModel) fieldDurationTo.getModel()).intValue())); } return searcher; } }