/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.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.gnu.org/licenses/agpl.txt * * 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. */ package se.streamsource.streamflow.client.util; import ca.odell.glazedlists.EventList; import org.qi4j.api.injection.scope.Structure; import org.qi4j.api.injection.scope.Uses; import org.qi4j.api.structure.Module; import org.qi4j.api.util.Iterables; import se.streamsource.dci.value.link.LinkValue; import se.streamsource.streamflow.client.ResourceModel; import se.streamsource.streamflow.client.ui.administration.AdministrationResources; import se.streamsource.streamflow.client.ui.administration.casetypes.CaseTypesView; import se.streamsource.streamflow.client.ui.administration.casetypes.RemovedCaseTypesView; import se.streamsource.streamflow.client.ui.administration.casetypes.SelectedCaseTypesView; import se.streamsource.streamflow.client.ui.administration.external.IntegrationPointsView; import se.streamsource.streamflow.client.ui.administration.filters.FiltersView; import se.streamsource.streamflow.client.ui.administration.forms.FormsView; import se.streamsource.streamflow.client.ui.administration.forms.SelectedFormsView; import se.streamsource.streamflow.client.ui.administration.forms.definition.FormEditView; import se.streamsource.streamflow.client.ui.administration.forms.definition.FormElementsView; import se.streamsource.streamflow.client.ui.administration.groups.GroupsView; import se.streamsource.streamflow.client.ui.administration.labels.LabelsView; import se.streamsource.streamflow.client.ui.administration.labels.SelectedLabelsView; import se.streamsource.streamflow.client.ui.administration.policy.AdministratorsView; import se.streamsource.streamflow.client.ui.administration.priorities.PrioritiesView; import se.streamsource.streamflow.client.ui.administration.projects.MembersView; import se.streamsource.streamflow.client.ui.administration.projects.ProjectsView; import se.streamsource.streamflow.client.ui.administration.resolutions.ResolutionsView; import se.streamsource.streamflow.client.ui.administration.resolutions.SelectedResolutionsView; import se.streamsource.streamflow.client.ui.administration.surface.AccessPointsView; import se.streamsource.streamflow.client.ui.administration.surface.EmailAccessPointsView; import se.streamsource.streamflow.client.ui.administration.surface.ProxyUsersView; import se.streamsource.streamflow.client.ui.administration.templates.TemplatesView; import se.streamsource.streamflow.client.ui.administration.users.UsersAdministrationListView; import javax.swing.JComponent; import javax.swing.JTabbedPane; import java.awt.event.KeyEvent; import java.util.LinkedHashMap; import java.util.Map; import static se.streamsource.dci.value.link.Links.*; import static se.streamsource.streamflow.client.util.i18n.*; /** * Show a REST resource as a tabbed view. To determine tabs, do a query to the resources directory URL ("/") to get * a ResourceValue. Then iterate through the registered views and check if they are in ResourceValue.resources(). By using * the order of the registered views we ensure that the UI order of the tabs is always the same, regardless of the order * returned from the server. */ public class TabbedResourceView extends JTabbedPane { private static final Map<String, Class<? extends JComponent>> views = new LinkedHashMap<String, Class<? extends JComponent>>(); private static final Map<String, Enum> tabNames = new LinkedHashMap<String, Enum>(); static { //addTab( "users", AdministrationResources.users_tab, UsersAdministrationView.class ); addTab( "members", AdministrationResources.members_tab, MembersView.class ); addTab( "projects", AdministrationResources.projects_tab, ProjectsView.class ); addTab( "groups", AdministrationResources.groups_tab, GroupsView.class ); addTab( "forms", AdministrationResources.forms_tab, FormsView.class ); addTab( "selectedforms", AdministrationResources.selected_forms_tab, SelectedFormsView.class ); addTab( "casetypes", AdministrationResources.casetypes_tab, CaseTypesView.class ); addTab( "selectedcasetypes", AdministrationResources.selected_casetypes_tab, SelectedCaseTypesView.class ); addTab( "removedcasetypes", AdministrationResources.removed_casetypes_tab, RemovedCaseTypesView.class); addTab( "priorities", AdministrationResources.casepriorities_tab, PrioritiesView.class ); addTab( "labels", AdministrationResources.labels_tab, LabelsView.class ); addTab( "selectedlabels", AdministrationResources.selected_labels_tab, SelectedLabelsView.class ); addTab( "resolutions", AdministrationResources.resolutions_tab, ResolutionsView.class ); addTab( "selectedresolutions", AdministrationResources.selected_resolutions_tab, SelectedResolutionsView.class ); addTab( "organizationusers", AdministrationResources.users_tab, UsersAdministrationListView.class ); addTab( "filters", AdministrationResources.filters_tab, FiltersView.class ); addTab( "accesspoints", AdministrationResources.accesspoints_tab, AccessPointsView.class ); addTab( "emailaccesspoints", AdministrationResources.emailaccesspoints_tab, EmailAccessPointsView.class ); addTab( "integrationpoints", AdministrationResources.integrationpoints_tab, IntegrationPointsView.class ); addTab( "proxyusers", AdministrationResources.proxyusers_tab, ProxyUsersView.class ); addTab( "templates", AdministrationResources.templates_tab, TemplatesView.class ); addTab( "forminfo", AdministrationResources.forminfo_tab, FormEditView.class ); addTab( "pages", AdministrationResources.formpages_tab, FormElementsView.class ); //addTab( "signatures", AdministrationResources.formsignatures_tab, FormSignaturesView.class ); addTab( "administrators", AdministrationResources.administrators_tab, AdministratorsView.class ); } private static void addTab( String name, Enum tabName, Class<? extends JComponent> viewClass ) { tabNames.put( name, tabName ); views.put( name, viewClass ); } public TabbedResourceView( @Uses ResourceModel model, @Structure Module module ) { setTabLayoutPolicy( JTabbedPane.WRAP_TAB_LAYOUT ); model.refresh(); EventList<LinkValue> resources = model.getResources(); int index = 0; for (Map.Entry<String, Class<? extends JComponent>> stringClassEntry : views.entrySet()) { LinkValue linkedResource = Iterables.first(Iterables.filter(withRel(stringClassEntry.getKey()), resources)); if (linkedResource != null) { String tabNameText = text( tabNames.get( stringClassEntry.getKey() ) ); Class<? extends JComponent> tabClass = stringClassEntry.getValue(); try { Object resourceModel = model.newResourceModel(linkedResource); addTab(tabNameText, module.objectBuilderFactory().newObjectBuilder(tabClass).use(resourceModel).newInstance()); setMnemonicAt( index, KeyEvent.VK_1 + index ); index++; } catch (Exception e) { e.printStackTrace(); } } } SettingsResourceView settings = new SettingsResourceView(model, module); if (settings.getComponentCount() > 1) addTab(text( AdministrationResources.settings_tab), settings); } }