/**
*
* 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.assembler;
import org.jdesktop.application.ApplicationContext;
import org.qi4j.api.common.Visibility;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.LayerAssembly;
import org.qi4j.bootstrap.ModuleAssembly;
import org.qi4j.spi.service.importer.NewObjectImporter;
import se.streamsource.streamflow.client.StreamflowApplication;
import se.streamsource.streamflow.client.ui.ApplicationInitializationService;
import se.streamsource.streamflow.client.ui.DebugWindow;
import se.streamsource.streamflow.client.ui.SelectUsersAndGroupsDialog;
import se.streamsource.streamflow.client.ui.account.AccountSelectionView;
import se.streamsource.streamflow.client.ui.account.AccountSelector;
import se.streamsource.streamflow.client.ui.account.AccountView;
import se.streamsource.streamflow.client.ui.account.AccountsDialog;
import se.streamsource.streamflow.client.ui.account.ChangePasswordDialog;
import se.streamsource.streamflow.client.ui.account.CreateAccountDialog;
import se.streamsource.streamflow.client.ui.account.ProfileView;
import se.streamsource.streamflow.client.ui.account.TestConnectionTask;
import se.streamsource.streamflow.client.ui.administration.AdministrationTreeView;
import se.streamsource.streamflow.client.ui.administration.AdministrationView;
import se.streamsource.streamflow.client.ui.administration.AdministrationWindow;
import se.streamsource.streamflow.client.ui.administration.FormOnRemoveView;
import se.streamsource.streamflow.client.ui.administration.casesettings.CaseAccessDefaultsView;
import se.streamsource.streamflow.client.ui.administration.casesettings.CaseArchivalSettingView;
import se.streamsource.streamflow.client.ui.administration.casesettings.CaseDefaultDaysToCompleteView;
import se.streamsource.streamflow.client.ui.administration.casesettings.FormOnCloseView;
import se.streamsource.streamflow.client.ui.administration.casesettings.PriorityOnCaseView;
import se.streamsource.streamflow.client.ui.administration.casetypes.CaseTypeDetailView;
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.IntegrationPointView;
import se.streamsource.streamflow.client.ui.administration.external.IntegrationPointsView;
import se.streamsource.streamflow.client.ui.administration.filters.ActionsView;
import se.streamsource.streamflow.client.ui.administration.filters.FilterView;
import se.streamsource.streamflow.client.ui.administration.filters.FiltersView;
import se.streamsource.streamflow.client.ui.administration.filters.LabelRuleView;
import se.streamsource.streamflow.client.ui.administration.filters.RulesView;
import se.streamsource.streamflow.client.ui.administration.forms.FormView;
import se.streamsource.streamflow.client.ui.administration.forms.FormsView;
import se.streamsource.streamflow.client.ui.administration.forms.SelectedFormsModel;
import se.streamsource.streamflow.client.ui.administration.forms.SelectedFormsView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldCreationDialog;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorAttachmentFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorCheckboxesFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorComboBoxFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorCommentFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorDateFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorFieldGroupValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorGeoLocationFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorListBoxFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorNumberFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorOpenSelectionFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorOptionButtonsFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorTextAreaFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldEditorTextFieldValueView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldValueObserver;
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.forms.definition.PageEditView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.SelectionElementsView;
import se.streamsource.streamflow.client.ui.administration.forms.definition.VisibilityRuleValuesView;
import se.streamsource.streamflow.client.ui.administration.groups.GroupsView;
import se.streamsource.streamflow.client.ui.administration.groups.ParticipantsView;
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.organisationsettings.MailRestrictionsView;
import se.streamsource.streamflow.client.ui.administration.organizations.OrganizationUsersView;
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.priorities.PriorityView;
import se.streamsource.streamflow.client.ui.administration.projects.MembersView;
import se.streamsource.streamflow.client.ui.administration.projects.ProjectModel;
import se.streamsource.streamflow.client.ui.administration.projects.ProjectsView;
import se.streamsource.streamflow.client.ui.administration.projectsettings.CaseDueOnNotificationView;
import se.streamsource.streamflow.client.ui.administration.projectsettings.RecipientsView;
import se.streamsource.streamflow.client.ui.administration.projectsettings.RequiresCaseTypeView;
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.roles.RolesView;
import se.streamsource.streamflow.client.ui.administration.surface.*;
import se.streamsource.streamflow.client.ui.administration.templates.SelectedTemplatesView;
import se.streamsource.streamflow.client.ui.administration.templates.TemplatesView;
import se.streamsource.streamflow.client.ui.administration.users.CreateUserDialog;
import se.streamsource.streamflow.client.ui.administration.users.ResetPasswordDialog;
import se.streamsource.streamflow.client.ui.administration.users.UserAdministrationDetailView;
import se.streamsource.streamflow.client.ui.administration.users.UsersAdministrationListView;
import se.streamsource.streamflow.client.ui.menu.AccountMenu;
import se.streamsource.streamflow.client.ui.menu.AdministrationMenuBar;
import se.streamsource.streamflow.client.ui.menu.EditMenu;
import se.streamsource.streamflow.client.ui.menu.FileMenu;
import se.streamsource.streamflow.client.ui.menu.HelpMenu;
import se.streamsource.streamflow.client.ui.menu.OverviewMenuBar;
import se.streamsource.streamflow.client.ui.menu.PerspectiveMenu;
import se.streamsource.streamflow.client.ui.menu.ViewMenu;
import se.streamsource.streamflow.client.ui.menu.WindowMenu;
import se.streamsource.streamflow.client.ui.menu.WorkspaceMenuBar;
import se.streamsource.streamflow.client.ui.overview.OverviewSummaryView;
import se.streamsource.streamflow.client.ui.overview.OverviewView;
import se.streamsource.streamflow.client.ui.overview.OverviewWindow;
import se.streamsource.streamflow.client.ui.workspace.WorkspaceContextView;
import se.streamsource.streamflow.client.ui.workspace.WorkspaceView;
import se.streamsource.streamflow.client.ui.workspace.WorkspaceWindow;
import se.streamsource.streamflow.client.ui.workspace.cases.CaseActionsView;
import se.streamsource.streamflow.client.ui.workspace.cases.CaseDetailView;
import se.streamsource.streamflow.client.ui.workspace.cases.CaseInfoView;
import se.streamsource.streamflow.client.ui.workspace.cases.CaseTableValue;
import se.streamsource.streamflow.client.ui.workspace.cases.PdfPrintingDialog;
import se.streamsource.streamflow.client.ui.workspace.cases.attachments.AttachmentsView;
import se.streamsource.streamflow.client.ui.workspace.cases.caselog.CaseLogView;
import se.streamsource.streamflow.client.ui.workspace.cases.contacts.ContactLookupResultDialog;
import se.streamsource.streamflow.client.ui.workspace.cases.contacts.ContactView;
import se.streamsource.streamflow.client.ui.workspace.cases.contacts.ContactsAdminView;
import se.streamsource.streamflow.client.ui.workspace.cases.contacts.ContactsView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.ConversationParticipantsView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.ConversationView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.ConversationsView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.CreateExternalMailUserDialog;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessageAttachmentsView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessageDraftAttachmentsView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessageDraftView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessageView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessagesConversationView;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessagesView;
import se.streamsource.streamflow.client.ui.workspace.cases.forms.CaseSubmittedFormView;
import se.streamsource.streamflow.client.ui.workspace.cases.forms.CaseSubmittedFormsView;
import se.streamsource.streamflow.client.ui.workspace.cases.forms.SubmittedFormsAdminView;
import se.streamsource.streamflow.client.ui.workspace.cases.general.CaseGeneralView;
import se.streamsource.streamflow.client.ui.workspace.cases.general.CaseLabelsView;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.AttachmentFieldPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.CheckboxesPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.ComboBoxPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.DatePanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.FormSubmissionWizardPageView;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.ListBoxPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.NumberPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.OpenSelectionPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.OptionButtonsPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.PossibleFormView;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.PossibleFormsView;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.TextAreaFieldPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.TextFieldPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.geo.GeoLocationFieldPanel;
import se.streamsource.streamflow.client.ui.workspace.cases.note.CaseNoteView;
import se.streamsource.streamflow.client.ui.workspace.search.ManagePerspectivesDialog;
import se.streamsource.streamflow.client.ui.workspace.search.SearchView;
import se.streamsource.streamflow.client.ui.workspace.table.CasesDetailView;
import se.streamsource.streamflow.client.ui.workspace.table.CasesTableView;
import se.streamsource.streamflow.client.ui.workspace.table.CasesView;
import se.streamsource.streamflow.client.ui.workspace.table.PerspectivePeriodView;
import se.streamsource.streamflow.client.ui.workspace.table.PerspectiveView;
import se.streamsource.streamflow.client.util.ActionBinder;
import se.streamsource.streamflow.client.util.ExceptionHandlerService;
import se.streamsource.streamflow.client.util.JavaHelp;
import se.streamsource.streamflow.client.util.StateBinder;
import se.streamsource.streamflow.client.util.TabbedResourceView;
import se.streamsource.streamflow.client.util.UncaughtExceptionHandler;
import se.streamsource.streamflow.client.util.ValueBinder;
import se.streamsource.streamflow.client.util.dialog.ConfirmationDialog;
import se.streamsource.streamflow.client.util.dialog.DialogService;
import se.streamsource.streamflow.client.util.dialog.InputDialog;
import se.streamsource.streamflow.client.util.dialog.NameDialog;
import se.streamsource.streamflow.client.util.dialog.SelectLinkDialog;
import se.streamsource.streamflow.client.util.dialog.SelectLinksDialog;
import se.streamsource.streamflow.client.util.mapquest.MapquestNominatimService;
import static org.qi4j.api.common.Visibility.*;
import static se.streamsource.streamflow.client.util.UIAssemblers.*;
/**
* JAVADOC
*/
public class UIAssembler
{
public void assemble(LayerAssembly layer) throws AssemblyException
{
menu(layer.module("Menu"));
client(layer.module("Client"));
account(layer.module("Account"));
workspace(layer.module("Workspace"));
overview(layer.module("Overview"));
administration(layer.module("Administration"));
}
private void account(ModuleAssembly module) throws AssemblyException
{
addViews(module, AccountView.class, ProfileView.class);
}
private void client(ModuleAssembly module) throws AssemblyException
{
module.objects(
StreamflowApplication.class,
AccountSelector.class
);
// SAF objects
module.importedServices(StreamflowApplication.class, ApplicationContext.class, AccountSelector.class).visibleIn(layer);
module.services(ApplicationInitializationService.class).instantiateOnStartup();
addDialogs(module, InputDialog.class,
NameDialog.class,
SelectUsersAndGroupsDialog.class,
CreateUserDialog.class,
CreateProxyUserDialog.class,
ConfirmationDialog.class,
ResetPasswordDialog.class);
module.objects(DebugWindow.class);
module.objects(
DialogService.class,
UncaughtExceptionHandler.class,
JavaHelp.class
).visibleIn(layer);
module.objects(MapquestNominatimService.class).visibleIn(application);
module.importedServices(UncaughtExceptionHandler.class,
JavaHelp.class).importedBy(NewObjectImporter.class).visibleIn(application);
module.services(
ExceptionHandlerService.class).instantiateOnStartup();
module.importedServices(DialogService.class).importedBy(NewObjectImporter.class).visibleIn(application);
module.objects(ActionBinder.class, ValueBinder.class, StateBinder.class).visibleIn(layer);
addViews(module, AccountSelectionView.class);
}
private void overview(ModuleAssembly module) throws AssemblyException
{
module.objects(OverviewWindow.class).visibleIn(layer);
addViews(module,
OverviewView.class,
OverviewSummaryView.class);
}
private void workspace(ModuleAssembly module) throws AssemblyException
{
//views(module, filter(matches(".*View|.*Panel"), getClasses(WorkspaceView.class)));
addViews( module,
WorkspaceView.class,
WorkspaceContextView.class,
SearchView.class,
CasesView.class,
CasesTableView.class,
PerspectivePeriodView.class );
addViews( module,
CaseActionsView.class,
CaseInfoView.class,
CasesDetailView.class,
CaseDetailView.class,
ContactsAdminView.class,
ContactsView.class,
ContactView.class,
CaseGeneralView.class,
CaseLogView.class,
CaseLabelsView.class,
CaseSubmittedFormsView.class,
CaseSubmittedFormView.class,
SubmittedFormsAdminView.class,
FormSubmissionWizardPageView.class,
PossibleFormsView.class,
PossibleFormView.class,
CheckboxesPanel.class,
ComboBoxPanel.class,
OptionButtonsPanel.class,
OpenSelectionPanel.class,
ListBoxPanel.class,
DatePanel.class,
NumberPanel.class,
TextAreaFieldPanel.class,
TextFieldPanel.class,
GeoLocationFieldPanel.class,
AttachmentFieldPanel.class,
MessagesConversationView.class,
ConversationsView.class,
ConversationView.class,
ConversationParticipantsView.class,
MessagesView.class,
MessageView.class,
MessageAttachmentsView.class,
MessageDraftView.class,
MessageDraftAttachmentsView.class,
AttachmentsView.class,
PerspectiveView.class,
CaseNoteView.class
);
addDialogs(module, ContactLookupResultDialog.class);
module.objects(WorkspaceWindow.class).visibleIn(layer);
addDialogs(module, SelectLinkDialog.class,
CreateExternalMailUserDialog.class,
ManagePerspectivesDialog.class,
PdfPrintingDialog.class);
module.values(CaseTableValue.class).visibleIn(Visibility.application);
}
private void menu(ModuleAssembly module) throws AssemblyException
{
addViews(module,
WorkspaceMenuBar.class,
OverviewMenuBar.class,
AdministrationMenuBar.class);
addViews(module,
FileMenu.class,
EditMenu.class,
ViewMenu.class,
AccountMenu.class,
WindowMenu.class,
HelpMenu.class,
PerspectiveMenu.class
);
addDialogs(module, CreateAccountDialog.class, AccountsDialog.class);
}
private void administration(ModuleAssembly module) throws AssemblyException
{
//views(module, Iterables.filter(matches(".*View"), getClasses(AdministrationView.class)));
module.objects(ProjectModel.class ).visibleIn(layer);
addMV(module, SelectedFormsModel.class, SelectedFormsView.class);
addViews(module,
AdministratorsView.class,
AdministrationView.class,
AdministrationTreeView.class,
ResolutionsView.class,
RolesView.class,
SelectedCaseTypesView.class,
RemovedCaseTypesView.class,
CaseTypeDetailView.class,
FormsView.class,
FormView.class,
GroupsView.class,
ParticipantsView.class,
ProjectsView.class,
LabelsView.class,
MembersView.class,
FormElementsView.class,
//FormSignatureView.class,
//FormSignaturesView.class,
SelectionElementsView.class,
VisibilityRuleValuesView.class,
PageEditView.class,
OrganizationUsersView.class,
FieldEditView.class,
CaseTypesView.class,
SelectedFormsView.class,
SelectedLabelsView.class,
SelectedResolutionsView.class,
CaseAccessDefaultsView.class,
CaseDefaultDaysToCompleteView.class,
CaseDueOnNotificationView.class,
RecipientsView.class,
RequiresCaseTypeView.class,
CaseArchivalSettingView.class,
FormOnCloseView.class,
FormOnRemoveView.class,
UserAdministrationDetailView.class,
UsersAdministrationListView.class,
ProxyUsersView.class,
AccessPointsView.class,
AccessPointView.class,
ReplacementSelectionFieldValuesView.class,
TemplatesView.class,
SelectedTemplatesView.class,
TabbedResourceView.class,
EmailAccessPointsView.class,
EmailAccessPointView.class,
FiltersView.class,
FilterView.class,
RulesView.class,
FormEditView.class,
ActionsView.class,
LabelRuleView.class,
PrioritiesView.class,
PriorityView.class,
PriorityOnCaseView.class,
FormLabelsView.class,
IntegrationPointsView.class,
IntegrationPointView.class,
MailRestrictionsView.class);
addViews(module,
FieldEditorAttachmentFieldValueView.class,
FieldEditorCheckboxesFieldValueView.class,
FieldEditorComboBoxFieldValueView.class,
FieldEditorCommentFieldValueView.class,
FieldEditorDateFieldValueView.class,
FieldEditorListBoxFieldValueView.class,
FieldEditorNumberFieldValueView.class,
FieldEditorOptionButtonsFieldValueView.class,
FieldEditorOpenSelectionFieldValueView.class,
FieldEditorTextAreaFieldValueView.class,
FieldEditorTextFieldValueView.class,
FieldEditorFieldGroupValueView.class,
FieldEditorGeoLocationFieldValueView.class);
addDialogs(module, FieldCreationDialog.class);
module.objects(FieldValueObserver.class);
addViews(module, TabbedResourceView.class);
module.objects(AdministrationWindow.class).visibleIn(layer);
addDialogs(module,
ChangePasswordDialog.class,
SelectLinksDialog.class);
addTasks(module, TestConnectionTask.class);
}
}