/**
*
* 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.qi4j.api.common.Visibility;
import org.qi4j.api.specification.Specifications;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.LayerAssembly;
import org.qi4j.bootstrap.ModuleAssembly;
import se.streamsource.streamflow.client.ui.account.AccountModel;
import se.streamsource.streamflow.client.ui.account.AccountsModel;
import se.streamsource.streamflow.client.ui.account.ProfileModel;
import se.streamsource.streamflow.client.ui.administration.AdministrationModel;
import se.streamsource.streamflow.client.ui.administration.FormOnRemoveModel;
import se.streamsource.streamflow.client.ui.administration.OrganizationModel;
import se.streamsource.streamflow.client.ui.administration.OrganizationalUnitModel;
import se.streamsource.streamflow.client.ui.administration.UsersAndGroupsModel;
import se.streamsource.streamflow.client.ui.administration.casesettings.CaseAccessDefaultsModel;
import se.streamsource.streamflow.client.ui.administration.casesettings.CaseArchivalSettingModel;
import se.streamsource.streamflow.client.ui.administration.casesettings.CaseDefaultDaysToCompleteModel;
import se.streamsource.streamflow.client.ui.administration.casesettings.FormOnCloseModel;
import se.streamsource.streamflow.client.ui.administration.casesettings.PriorityOnCaseModel;
import se.streamsource.streamflow.client.ui.administration.casetypes.*;
import se.streamsource.streamflow.client.ui.administration.external.IntegrationPointModel;
import se.streamsource.streamflow.client.ui.administration.external.IntegrationPointsModel;
import se.streamsource.streamflow.client.ui.administration.filters.ActionsModel;
import se.streamsource.streamflow.client.ui.administration.filters.FilterModel;
import se.streamsource.streamflow.client.ui.administration.filters.FiltersModel;
import se.streamsource.streamflow.client.ui.administration.filters.LabelRuleModel;
import se.streamsource.streamflow.client.ui.administration.filters.RulesModel;
import se.streamsource.streamflow.client.ui.administration.forms.FormModel;
import se.streamsource.streamflow.client.ui.administration.forms.FormsModel;
import se.streamsource.streamflow.client.ui.administration.forms.SelectedFormsModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldCreationModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FieldValueEditModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FormPagesModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FormSignatureModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.FormSignaturesModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.PageEditModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.SelectionElementsModel;
import se.streamsource.streamflow.client.ui.administration.forms.definition.VisibilityRuleValuesModel;
import se.streamsource.streamflow.client.ui.administration.groups.GroupModel;
import se.streamsource.streamflow.client.ui.administration.groups.GroupsModel;
import se.streamsource.streamflow.client.ui.administration.groups.ParticipantsModel;
import se.streamsource.streamflow.client.ui.administration.labels.LabelModel;
import se.streamsource.streamflow.client.ui.administration.labels.LabelsModel;
import se.streamsource.streamflow.client.ui.administration.labels.SelectedLabelsModel;
import se.streamsource.streamflow.client.ui.administration.organisationsettings.MailRestrictionsModel;
import se.streamsource.streamflow.client.ui.administration.organizations.OrganizationUsersModel;
import se.streamsource.streamflow.client.ui.administration.organizations.OrganizationsModel;
import se.streamsource.streamflow.client.ui.administration.policy.AdministratorsModel;
import se.streamsource.streamflow.client.ui.administration.priorities.PrioritiesModel;
import se.streamsource.streamflow.client.ui.administration.priorities.PriorityModel;
import se.streamsource.streamflow.client.ui.administration.projects.MembersModel;
import se.streamsource.streamflow.client.ui.administration.projects.ProjectModel;
import se.streamsource.streamflow.client.ui.administration.projects.ProjectsModel;
import se.streamsource.streamflow.client.ui.administration.projectsettings.CaseDueOnNotificationModel;
import se.streamsource.streamflow.client.ui.administration.projectsettings.RecipientsModel;
import se.streamsource.streamflow.client.ui.administration.projectsettings.RequiresCaseTypeModel;
import se.streamsource.streamflow.client.ui.administration.resolutions.ResolutionsModel;
import se.streamsource.streamflow.client.ui.administration.resolutions.SelectedResolutionsModel;
import se.streamsource.streamflow.client.ui.administration.roles.RolesModel;
import se.streamsource.streamflow.client.ui.administration.surface.*;
import se.streamsource.streamflow.client.ui.administration.templates.SelectedTemplatesModel;
import se.streamsource.streamflow.client.ui.administration.users.UserAdministrationDetailModel;
import se.streamsource.streamflow.client.ui.administration.users.UsersAdministrationListModel;
import se.streamsource.streamflow.client.ui.overview.OverviewModel;
import se.streamsource.streamflow.client.ui.overview.OverviewSummaryModel;
import se.streamsource.streamflow.client.ui.workspace.WorkspaceModel;
import se.streamsource.streamflow.client.ui.workspace.cases.CaseModel;
import se.streamsource.streamflow.client.ui.workspace.cases.CaseTableValue;
import se.streamsource.streamflow.client.ui.workspace.cases.CasesModel;
import se.streamsource.streamflow.client.ui.workspace.cases.attachments.AttachmentsModel;
import se.streamsource.streamflow.client.ui.workspace.cases.caselog.CaseLogModel;
import se.streamsource.streamflow.client.ui.workspace.cases.contacts.ContactModel;
import se.streamsource.streamflow.client.ui.workspace.cases.contacts.ContactsModel;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.ConversationModel;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.ConversationParticipantsModel;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.ConversationsModel;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessageDraftModel;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessageModel;
import se.streamsource.streamflow.client.ui.workspace.cases.conversations.MessagesModel;
import se.streamsource.streamflow.client.ui.workspace.cases.forms.CaseSubmittedFormModel;
import se.streamsource.streamflow.client.ui.workspace.cases.forms.CaseSubmittedFormsModel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.CaseGeneralModel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.CaseLabelsModel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.FormDraftModel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.FormSubmissionWizardPageModel;
import se.streamsource.streamflow.client.ui.workspace.cases.general.forms.PossibleFormsModel;
import se.streamsource.streamflow.client.ui.workspace.cases.note.CaseNoteModel;
import se.streamsource.streamflow.client.ui.workspace.search.PerspectivesModel;
import se.streamsource.streamflow.client.ui.workspace.search.SearchResultTableModel;
import se.streamsource.streamflow.client.ui.workspace.table.CasesTableModel;
import se.streamsource.streamflow.client.ui.workspace.table.PerspectivePeriodModel;
import se.streamsource.streamflow.client.util.LinksListModel;
import static org.qi4j.api.common.Visibility.*;
import static se.streamsource.streamflow.client.util.UIAssemblers.*;
/**
* TODO
*/
public class ModelAssembler
{
public void assemble(LayerAssembly layer) throws AssemblyException
{
account(layer.module("Account"));
administration(layer.module("Administration"));
search(layer.module("Search"));
workspace(layer.module("Workspace"));
overview(layer.module("Overview"));
// Everything has application visibility
layer.objects(Specifications.<Object>TRUE()).visibleIn(Visibility.application);
}
private void search(ModuleAssembly module)
{
module.objects(SearchResultTableModel.class).visibleIn(layer);
}
private void account(ModuleAssembly module) throws AssemblyException
{
addModels(module, AccountsModel.class, AccountModel.class, ProfileModel.class);
}
private void overview(ModuleAssembly module) throws AssemblyException
{
addModels(module, OverviewModel.class, OverviewSummaryModel.class);
}
private void workspace(ModuleAssembly module) throws AssemblyException
{
/*
for (Class aClass : filter(matches(".*Model"), getClasses(WorkspaceModel.class)))
{
module.objects( aClass ).visibleIn(Visibility.layer);
}
*/
addModels(module,
WorkspaceModel.class,
PerspectivesModel.class,
CasesModel.class,
CasesTableModel.class,
PerspectivePeriodModel.class);
addModels(module,
CaseModel.class,
ContactsModel.class,
ContactModel.class,
CaseGeneralModel.class,
CaseLogModel.class,
CaseLabelsModel.class,
CaseSubmittedFormsModel.class,
CaseSubmittedFormModel.class,
FormSubmissionWizardPageModel.class,
PossibleFormsModel.class,
FormDraftModel.class,
MessagesModel.class,
MessageModel.class,
MessageDraftModel.class,
ConversationModel.class,
ConversationsModel.class,
ConversationParticipantsModel.class,
AttachmentsModel.class,
CaseNoteModel.class
);
module.values(CaseTableValue.class).visibleIn(Visibility.application);
}
private void administration(ModuleAssembly module) throws AssemblyException
{
/**for (Class aClass : filter(matches(".*Model"), getClasses(AdministrationModel.class)))
{
module.objects( aClass ).visibleIn(Visibility.layer);
}*/
addModels(module,
AdministrationModel.class,
OrganizationModel.class,
OrganizationalUnitModel.class,
CaseAccessDefaultsModel.class,
CaseDefaultDaysToCompleteModel.class,
CaseDueOnNotificationModel.class,
RecipientsModel.class,
RequiresCaseTypeModel.class,
CaseArchivalSettingModel.class,
FormOnCloseModel.class,
FormOnRemoveModel.class,
CaseTypesModel.class,
CaseTypeModel.class,
AdministratorsModel.class,
FieldValueEditModel.class,
FieldCreationModel.class,
FormsModel.class,
FormModel.class,
//FormElementsModel.class,
FormSignaturesModel.class,
FormSignatureModel.class,
GroupsModel.class,
GroupModel.class,
LabelsModel.class,
LabelModel.class,
MembersModel.class,
OrganizationsModel.class,
OrganizationUsersModel.class,
PageEditModel.class,
ParticipantsModel.class,
ProjectsModel.class,
ProjectsModel.class,
ProjectModel.class,
RolesModel.class,
ResolutionsModel.class,
SelectedCaseTypesModel.class,
RemovedCaseTypesModel.class,
RemovedCaseTypeModel.class,
CaseTypeDetailModel.class,
SelectionElementsModel.class,
SelectedLabelsModel.class,
SelectedResolutionsModel.class,
SelectedTemplatesModel.class,
SelectedFormsModel.class,
UsersAdministrationListModel.class,
UserAdministrationDetailModel.class,
FiltersModel.class,
FilterModel.class,
RulesModel.class,
FormPagesModel.class,
FormModel.class,
ActionsModel.class,
LabelRuleModel.class,
PrioritiesModel.class,
PriorityModel.class,
PriorityOnCaseModel.class,
FormLabelsModel.class,
VisibilityRuleValuesModel.class,
MailRestrictionsModel.class);
addModels(module, LinksListModel.class,
UsersAndGroupsModel.class);
// Surface
addModels(module,
AccessPointsModel.class,
AccessPointModel.class,
ReplacementSelectionFieldValuesModel.class,
EmailAccessPointModel.class,
EmailAccessPointsModel.class,
ProxyUsersModel.class);
// External
addModels( module,
IntegrationPointsModel.class,
IntegrationPointModel.class);
}
}