/**
*
* 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.web.context.administration;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.qi4j.api.common.Optional;
import org.qi4j.api.constraint.Name;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.injection.scope.Structure;
import org.qi4j.api.injection.scope.Uses;
import org.qi4j.api.mixin.Mixins;
import org.qi4j.api.structure.Module;
import org.qi4j.api.value.ValueBuilder;
import se.streamsource.dci.api.Context;
import se.streamsource.dci.api.IndexContext;
import se.streamsource.dci.api.RoleMap;
import se.streamsource.dci.value.FormValue;
import se.streamsource.dci.value.link.LinksValue;
import se.streamsource.streamflow.api.administration.priority.PriorityValue;
import se.streamsource.streamflow.web.context.LinksBuilder;
import se.streamsource.streamflow.web.domain.entity.organization.OrganizationsEntity;
import se.streamsource.streamflow.web.domain.interaction.gtd.RequiresPriorityVisibility;
import se.streamsource.streamflow.web.domain.structure.casetype.PriorityOnCase;
import se.streamsource.streamflow.web.domain.structure.organization.Organization;
import se.streamsource.streamflow.web.domain.structure.organization.Organizations;
import se.streamsource.streamflow.web.domain.structure.organization.Priorities;
import se.streamsource.streamflow.web.domain.structure.organization.Priority;
import se.streamsource.streamflow.web.domain.structure.organization.PrioritySettings;
/**
* Context for case priority settings.
*/
@Mixins(PriorityOnCaseContext.Mixin.class)
public interface PriorityOnCaseContext
extends Context, IndexContext<FormValue>
{
@RequiresPriorityVisibility
void updatemandatory( @Name("mandatory") Boolean mandatory );
void updatevisibility( @Name("visible") Boolean visible );
void defaultpriority( @Optional @Name("id") String id );
LinksValue priorities();
abstract class Mixin implements PriorityOnCaseContext, IndexContext<FormValue>
{
@Structure
Module module;
@Uses
PriorityOnCase priorityOnCase;
@Uses
PriorityOnCase.Data priorityOnCaseData;
public FormValue index()
{
ValueBuilder<FormValue> builder = module.valueBuilderFactory().newValueBuilder( FormValue.class );
builder.prototype().form().get().put( "visible", priorityOnCaseData.visible().get().toString() );
builder.prototype().form().get().put( "mandatory", priorityOnCaseData.mandatory().get().toString() );
builder.prototype().form().get().put( "prioritydefault", priorityOnCaseData.defaultPriority().get() != null
? EntityReference.getEntityReference( priorityOnCaseData.defaultPriority().get() ).identity() : "-1" );
return builder.newInstance();
}
public void updatevisibility( Boolean visible )
{
priorityOnCase.changeVisibility( visible );
}
public void updatemandatory( Boolean mandatory )
{
priorityOnCase.changeMandatory( mandatory );
}
public void defaultpriority( String id )
{
if( id != null )
{
priorityOnCase.changeDefaultPriority( module.unitOfWorkFactory().currentUnitOfWork().get( Priority.class, id ) );
} else
priorityOnCase.changeDefaultPriority( null );
}
public LinksValue priorities()
{
Organizations.Data orgs = module.unitOfWorkFactory().currentUnitOfWork().get( OrganizationsEntity.class, OrganizationsEntity.ORGANIZATIONS_ID );
Organization org = orgs.organization().get();
RoleMap.current().set( org );
Priorities.Data priorities = RoleMap.role( Priorities.Data.class );
LinksBuilder builder = new LinksBuilder( module.valueBuilderFactory() );
builder.command( "prioritydefault" );
ValueBuilder<PriorityValue> linkBuilder = module.valueBuilderFactory().newValueBuilder( PriorityValue.class );
linkBuilder.prototype().text().set( "-" );
linkBuilder.prototype().id().set( "-1" );
linkBuilder.prototype().href().set( "" );
linkBuilder.prototype().priority().set( -1 );
builder.addLink( linkBuilder.newInstance() );
List<Priority> sortedList = priorities.prioritys().toList();
Collections.sort( sortedList, new Comparator<Priority>()
{
public int compare( Priority o1, Priority o2 )
{
return ((PrioritySettings.Data) o1).priority().get().compareTo( ((PrioritySettings.Data) o2).priority().get() );
}
} );
for(Priority priority : sortedList )
{
String id = EntityReference.getEntityReference( priority ).identity();
linkBuilder.prototype().priority().set( ((PrioritySettings.Data)priority).priority().get() );
linkBuilder.prototype().color().set( ((PrioritySettings.Data)priority).color().get() );
linkBuilder.prototype().id().set( id );
linkBuilder.prototype().text().set( priority.getDescription() );
linkBuilder.prototype().href().set( "prioritydefault" );
builder.addLink( linkBuilder.newInstance() );
}
return builder.newLinks();
}
}
}