/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 * * 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 org.apache.isis.core.runtime.services.ixn; import java.util.List; import java.util.UUID; import org.apache.isis.applib.annotation.DomainService; import org.apache.isis.applib.annotation.NatureOfService; import org.apache.isis.applib.annotation.Programmatic; import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.applib.services.bookmark.BookmarkService; import org.apache.isis.applib.services.iactn.Interaction; import org.apache.isis.applib.services.iactn.InteractionContext; import org.apache.isis.applib.services.user.UserService; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal; import org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.isis.schema.cmd.v1.ActionDto; import org.apache.isis.schema.cmd.v1.ParamDto; import org.apache.isis.schema.cmd.v1.PropertyDto; import org.apache.isis.schema.common.v1.ValueWithTypeDto; import org.apache.isis.schema.ixn.v1.ActionInvocationDto; import org.apache.isis.schema.ixn.v1.PropertyEditDto; import org.apache.isis.schema.utils.CommandDtoUtils; import org.apache.isis.schema.utils.InteractionDtoUtils; @DomainService( nature = NatureOfService.DOMAIN, menuOrder = "" + Integer.MAX_VALUE ) public class InteractionDtoServiceInternalDefault implements InteractionDtoServiceInternal { @Override @Programmatic public ActionInvocationDto asActionInvocationDto( final ObjectAction objectAction, final ObjectAdapter targetAdapter, final List<ObjectAdapter> argumentAdapters) { final Interaction interaction = interactionContext.getInteraction(); final UUID transactionId = interaction.getTransactionId(); final int nextEventSequence = interaction.next(Interaction.Sequence.INTERACTION.id()); final Object targetPojo = targetAdapter.getObject(); final Bookmark targetBookmark = bookmarkService.bookmarkFor(targetPojo); final String actionIdentifier = objectAction.getIdentifier().toClassAndNameIdentityString(); final String actionId = actionIdentifier.substring(actionIdentifier.indexOf('#')+1); final String targetTitle = targetBookmark.toString() + ": " + actionId; final String currentUser = userService.getUser().getName(); final ActionDto actionDto = new ActionDto(); commandDtoServiceInternal.addActionArgs( objectAction, actionDto, argumentAdapters.toArray(new ObjectAdapter[]{})); final List<ParamDto> parameterDtos = CommandDtoUtils.parametersFor(actionDto).getParameter(); final String transactionIdStr = transactionId.toString(); return InteractionDtoUtils.newActionInvocation( nextEventSequence, targetBookmark, targetTitle, actionDto.getMemberIdentifier(), parameterDtos, currentUser ); } @Override @Programmatic public ActionInvocationDto updateResult( final ActionInvocationDto actionInvocationDto, final ObjectAction objectAction, final Object resultPojo) { final ObjectSpecification returnSpec = objectAction.getReturnType(); final Class<?> returnType = returnSpec.getCorrespondingClass(); InteractionDtoUtils.addReturn( actionInvocationDto, returnType, resultPojo, bookmarkService); return actionInvocationDto; } @Override @Programmatic public PropertyEditDto asPropertyEditDto( final OneToOneAssociation property, final ObjectAdapter targetAdapter, final ObjectAdapter newValueAdapterIfAny) { final Interaction interaction = interactionContext.getInteraction(); final int nextEventSequence = interaction.next(Interaction.Sequence.INTERACTION.id()); final Object targetPojo = targetAdapter.getObject(); final Bookmark targetBookmark = bookmarkService.bookmarkFor(targetPojo); final String propertyIdentifier = property.getIdentifier().toClassAndNameIdentityString(); final String propertyId = propertyIdentifier.substring(propertyIdentifier.indexOf('#')+1); final String targetTitle = targetBookmark.toString() + ": " + propertyId; final String currentUser = userService.getUser().getName(); final PropertyDto propertyDto = new PropertyDto(); commandDtoServiceInternal.addPropertyValue(property, propertyDto, newValueAdapterIfAny); final ValueWithTypeDto newValue = propertyDto.getNewValue(); return InteractionDtoUtils.newPropertyEdit( nextEventSequence, targetBookmark, targetTitle, propertyDto.getMemberIdentifier(), newValue, currentUser ); } @javax.inject.Inject CommandDtoServiceInternal commandDtoServiceInternal; @javax.inject.Inject private BookmarkService bookmarkService; @javax.inject.Inject private InteractionContext interactionContext; @javax.inject.Inject private UserService userService; }