package org.jtheque.films.view.impl.panels; /* * 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.error.JThequeError; import org.jtheque.core.utils.ui.builders.I18nPanelBuilder; import org.jtheque.core.utils.ui.builders.JThequePanelBuilder; import org.jtheque.core.utils.ui.constraints.ConstraintManager; import org.jtheque.films.persistence.od.able.Film; import org.jtheque.films.services.able.IRealizersService; import org.jtheque.films.utils.Constants.Properties; import org.jtheque.films.view.able.IInfosFilmView; import org.jtheque.films.view.impl.fb.IFilmFormBean; 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.actions.principal.CreateNewPrincipalAction; import org.jtheque.primary.view.impl.listeners.ObjectChangedEvent; import org.jtheque.primary.view.impl.models.DataContainerCachedComboBoxModel; import org.jtheque.utils.ui.GridBagUtils; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JFormattedTextField; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.text.DefaultFormatter; import java.text.NumberFormat; import java.util.Collection; /** * Panel for general informations of the film. * * @author Baptiste Wicht */ public final class JPanelInfosFilm extends JPanel implements IInfosFilmView { private DataContainerCachedComboBoxModel<Person> modelRealizer; private DataContainerCachedComboBoxModel<SimpleData> modelLanguage; private DataContainerCachedComboBoxModel<SimpleData> modelSaga; private JComboBox comboRealizer; private JComboBox comboLanguage; private JComboBox comboSaga; private JFormattedTextField fieldYear; private JFormattedTextField fieldDuration; private JTextArea areaResume; private JButton buttonAddLanguage; private JButton buttonAddSaga; @Resource private ISimpleDataService languagesService; @Resource private IRealizersService realizersService; @Resource private ISimpleDataService sagasService; /** * Build the panel. */ @PostConstruct private void build() { I18nPanelBuilder builder = new JThequePanelBuilder(this); addRealizerField(builder); NumberFormat format = NumberFormat.getNumberInstance(); format.setParseIntegerOnly(true); format.setGroupingUsed(false); addYearField(builder, format); addDurationField(builder, format); addLanguageField(builder); addSagaField(builder); addResumeField(builder); } /** * Add the realizer field. * * @param builder The builder of the panel. */ private void addRealizerField(I18nPanelBuilder builder) { builder.addI18nLabel(Properties.Film.REALIZER, builder.gbcSet(0, 0)); modelRealizer = new DataContainerCachedComboBoxModel<Person>(realizersService); comboRealizer = builder.addComboBox(modelRealizer, builder.gbcSet(1, 0)); comboRealizer.setEnabled(false); } /** * Add the year field. * * @param builder The builder of the panel. * @param format The format of the year. */ private void addYearField(I18nPanelBuilder builder, NumberFormat format) { builder.addI18nLabel(Properties.Film.YEAR, builder.gbcSet(0, 1)); fieldYear = new JFormattedTextField(format); fieldYear.setColumns(4); ((DefaultFormatter) fieldYear.getFormatter()).setAllowsInvalid(false); fieldYear.setEnabled(false); ConstraintManager.configure(fieldYear, Properties.Film.YEAR); builder.add(fieldYear, builder.gbcSet(1, 1)); } /** * Add the duration field. * * @param builder The builder of the panel. * @param format The format of the duration. */ private void addDurationField(I18nPanelBuilder builder, NumberFormat format) { builder.addI18nLabel(Properties.Film.DURATION, builder.gbcSet(0, 2)); fieldDuration = builder.add(new JFormattedTextField(format), builder.gbcSet(1, 2)); fieldDuration.setColumns(4); fieldDuration.setEnabled(false); ConstraintManager.configure(fieldDuration, Properties.Film.DURATION); } /** * Add the language field. * * @param builder The builder of the panel. */ private void addLanguageField(I18nPanelBuilder builder) { builder.addI18nLabel(Properties.Film.LANGUAGE, builder.gbcSet(0, 3)); modelLanguage = new DataContainerCachedComboBoxModel<SimpleData>(languagesService); comboLanguage = builder.addComboBox(modelLanguage, builder.gbcSet(1, 3)); comboLanguage.setEnabled(false); buttonAddLanguage = builder.addButton( new CreateNewPrincipalAction("generic.view.actions.new", "languageController"), builder.gbcSet(2, 3)); buttonAddLanguage.setEnabled(false); } /** * Add the saga field. * * @param builder The builder of the panel. */ private void addSagaField(I18nPanelBuilder builder) { builder.addI18nLabel(Properties.Film.SAGA, builder.gbcSet(0, 4)); modelSaga = new DataContainerCachedComboBoxModel<SimpleData>(sagasService); comboSaga = builder.addComboBox(modelSaga, builder.gbcSet(1, 4)); comboSaga.setEnabled(false); buttonAddSaga = builder.addButton(new CreateNewPrincipalAction("generic.view.actions.new", "sagaController"), builder.gbcSet(2, 4)); buttonAddSaga.setEnabled(false); } /** * Add the resume field. * * @param builder The builder of the panel. */ private void addResumeField(I18nPanelBuilder builder) { builder.addI18nLabel(Properties.Film.RESUME, builder.gbcSet(0, 5)); areaResume = new JTextArea(); areaResume.setEnabled(false); areaResume.setLineWrap(true); areaResume.setWrapStyleWord(true); areaResume.setAutoscrolls(true); builder.addScrolled(areaResume, builder.gbcSet(0, 6, GridBagUtils.BOTH, GridBagUtils.ABOVE_BASELINE_LEADING, 0, 0, 1.0, 1.0)); } @Override public void objectChanged(ObjectChangedEvent event) { Film film = (Film) event.getObject(); if (film.getTheRealizer() != null) { modelRealizer.setSelectedItem(film.getTheRealizer()); } if (film.getTheLanguage() != null) { modelLanguage.setSelectedItem(film.getTheLanguage()); } if (film.getTheSaga() != null) { modelSaga.setSelectedItem(film.getTheSaga()); } fieldYear.setText(Integer.toString(film.getYear())); fieldDuration.setText(Integer.toString(film.getDuration())); areaResume.setText(film.getResume()); } /** * Fill the form bean. * * @param fb The form bean to fill. */ @Override public void fillFilm(IFilmFormBean fb) { fb.setRealizer(modelRealizer.getSelectedData()); fb.setLanguage(modelLanguage.getSelectedData()); fb.setYear(Integer.parseInt(fieldYear.getText())); fb.setDuration(Integer.parseInt(fieldDuration.getText())); fb.setResume(areaResume.getText()); fb.setSaga(modelSaga.getSelectedData()); } @Override public void setEnabled(boolean enabled) { comboRealizer.setEnabled(enabled); comboLanguage.setEnabled(enabled); comboSaga.setEnabled(enabled); fieldYear.setEnabled(enabled); fieldDuration.setEnabled(enabled); areaResume.setEnabled(enabled); buttonAddLanguage.setEnabled(enabled); buttonAddSaga.setEnabled(enabled); super.setEnabled(enabled); } /** * Validate the view. * * @param errors The errors list to fill. */ @Override public void validate(Collection<JThequeError> errors) { ConstraintManager.validate(Properties.Film.REALIZER, fieldYear.getText(), errors); ConstraintManager.validate(Properties.Film.DURATION, fieldDuration.getText(), errors); ConstraintManager.validate(Properties.Film.RESUME, areaResume.getText(), errors); ConstraintManager.validate(Properties.Film.REALIZER, modelRealizer.getSelectedData(), errors); ConstraintManager.validate(Properties.Film.SAGA, modelSaga.getSelectedData(), errors); ConstraintManager.validate(Properties.Film.LANGUAGE, modelLanguage.getSelectedData(), errors); } @Override public JComponent getImpl() { return this; } }