biz.dfch.activiti.wrapper.service.ActivitiService.java Source code

Java tutorial

Introduction

Here is the source code for biz.dfch.activiti.wrapper.service.ActivitiService.java

Source

/**
 * Copyright 2015 d-fens GmbH
 * <p>
 * Licensed 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
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * 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 biz.dfch.activiti.wrapper.service;

import biz.dfch.activiti.wrapper.converter.ProcessMetadataConverter;
import biz.dfch.activiti.wrapper.domain.ActivitiProcessMetadata;
import biz.dfch.activiti.wrapper.domain.ProcessMetadata;
import biz.dfch.activiti.wrapper.exception.ActivityException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.client.fluent.Request;
import org.apache.http.entity.ContentType;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

@Service
public class ActivitiService {

    private static final Logger LOG = Logger.getLogger(ActivitiService.class);

    @Value("${activiti.uri}")
    private String activitiUri;

    @Value("${activiti.user}")
    private String activitiUser;

    @Value("${activiti.password}")
    private String activitiPassword;

    @Autowired
    private ObjectMapper objectMapper;

    public void invokeProcess(ProcessMetadata processMetadata) {

        LOG.info("Sending request to start process at activity server '" + activitiUri + "'");

        try {
            String response = Request.Post(getRequestUri()).setHeader("Authorization", createBasicAuth())
                    .bodyString(objectMapper.writeValueAsString(createBody(processMetadata)),
                            ContentType.APPLICATION_JSON)
                    .execute().returnContent().asString();
            LOG.info("Got response from activiti engine: " + objectMapper.writeValueAsString(response));
        } catch (IOException e) {
            throw new ActivityException("Exception occured while sending request to Activiti", e);
        }
    }

    private ActivitiProcessMetadata createBody(ProcessMetadata processMetadata) {
        ActivitiProcessMetadata activitiProcessMetadata = new ActivitiProcessMetadata();
        activitiProcessMetadata.setProcessDefinitionKey(createProcessDefinitionKey(processMetadata));
        activitiProcessMetadata.setVariables(ProcessMetadataConverter.convertToProcessVariables(processMetadata));
        return activitiProcessMetadata;
    }

    private String createProcessDefinitionKey(ProcessMetadata processMetadata) {
        return String.format("%s.%s.%s", processMetadata.getAssetType(), processMetadata.getAction(),
                processMetadata.getType());
    }

    private URI getRequestUri() {
        try {
            String uriAsString = (activitiUri + "/runtime/process-instances").replaceAll("(?<!(http:|https:))[//]+",
                    "/");
            return new URI(uriAsString);
        } catch (URISyntaxException e) {
            throw new ActivityException("URI-conversion failed (activitiUri: " + activitiUri + ")", e);
        }
    }

    private String createBasicAuth() {
        String authToken = new String(
                Base64.encodeBase64(String.format("%s:%s", activitiUser, activitiPassword).getBytes()));
        return String.format("Basic %s", authToken);
    }
}