/**
*
* 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.workspace.cases.general;
import org.qi4j.api.entity.EntityComposite;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.injection.scope.Service;
import org.qi4j.api.injection.scope.Structure;
import org.qi4j.api.structure.Module;
import org.qi4j.api.value.ValueBuilder;
import org.qi4j.api.value.ValueBuilderFactory;
import se.streamsource.dci.api.IndexContext;
import se.streamsource.dci.api.RoleMap;
import se.streamsource.dci.value.link.LinkValue;
import se.streamsource.dci.value.link.LinksValue;
import se.streamsource.streamflow.api.workspace.cases.caselog.CaseLogEntryDTO;
import se.streamsource.streamflow.api.workspace.cases.general.CaseGeneralDTO;
import se.streamsource.streamflow.web.application.knowledgebase.KnowledgebaseService;
import se.streamsource.streamflow.web.context.LinksBuilder;
import se.streamsource.streamflow.web.domain.entity.caze.CaseEntity;
import se.streamsource.streamflow.web.domain.structure.casetype.CaseType;
/**
* JAVADOC
*/
public class CaseGeneralContext
implements IndexContext<CaseGeneralDTO>
{
@Structure Module module;
@Service
KnowledgebaseService knowledgebaseService;
public CaseGeneralDTO index()
{
ValueBuilderFactory vbf = module.valueBuilderFactory();
ValueBuilder<CaseGeneralDTO> builder = vbf.newValueBuilder( CaseGeneralDTO.class );
CaseEntity aCase = RoleMap.role( CaseEntity.class );
// STREAMFLOW-714
// There might be cases created with desciption longer than 50 characters. CaseGeneralDTO only allows 50 så
// we have to make sure we only let 50 chars through to avoid Nullpointer on the klient side.
// The real fix for this is in CreateCaseFromEmail
String description = aCase.description().get();
builder.prototype().description().set( description.length() > 50 ? description.substring( 0, 50 ) : description );
CaseType caseType = aCase.caseType().get();
if (caseType != null)
{
ValueBuilder<LinkValue> caseTypeBuilder = vbf.newValueBuilder( LinkValue.class );
caseTypeBuilder.prototype().text().set( caseType.getDescription() );
caseTypeBuilder.prototype().id().set( EntityReference.getEntityReference( caseType ).identity() );
caseTypeBuilder.prototype().href().set(knowledgebaseService.createURL((EntityComposite) caseType));
builder.prototype().caseType().set( caseTypeBuilder.newInstance() );
}
builder.prototype().creationDate().set( aCase.createdOn().get() );
builder.prototype().caseId().set( aCase.caseId().get() );
builder.prototype().dueOn().set( aCase.dueOn().get() );
builder.prototype().status().set( aCase.status().get() );
if( aCase.casepriority().get() != null )
{
ValueBuilder<LinkValue> priorityBuilder = vbf.newValueBuilder( LinkValue.class );
priorityBuilder.prototype().text().set( aCase.casepriority().get().getDescription() );
priorityBuilder.prototype().id().set( EntityReference.getEntityReference( aCase.casepriority().get() ).identity() );
priorityBuilder.prototype().href().set( "default" );
builder.prototype().priority().set( priorityBuilder.newInstance() );
}
return builder.newInstance();
}
public LinksValue caselog()
{
LinksBuilder links = new LinksBuilder( module.valueBuilderFactory() );
ValueBuilder<CaseLogEntryDTO> builder = module.valueBuilderFactory().newValueBuilder( CaseLogEntryDTO.class );
return links.newLinks();
}
}