All Downloads are FREE. Search and download functionalities are using the official Maven repository.

artoria.action.handler.AbstractImportExportActionHandler Maven / Gradle / Ivy

The newest version!
package artoria.action.handler;

import artoria.data.Dict;
import artoria.data.bean.BeanUtils;
import artoria.util.Assert;

import java.util.Map;
import java.util.concurrent.Future;

import static artoria.common.constant.Numbers.*;
import static artoria.util.ObjectUtils.cast;

/**
 * The abstract import and export action handler.
 * @param 

The type of the import or export parameter * @param The type of data fetched or parsed * @author Kahle */ public abstract class AbstractImportExportActionHandler extends AbstractAsyncClassicActionHandler implements ImportExportHandler { public AbstractImportExportActionHandler(String actionName) { super(actionName); } /** * Create the context object from the arguments array. * @param contextClass The class of the context object * @param arguments The specific arguments array * @param The generic type of the context object * @return The import or export context object */ protected > T createContext(Class contextClass, Object[] arguments) { // Check of parameters. Assert.notNull(contextClass, "Parameter \"contextClass\" must not null. "); Assert.notNull(arguments, "Parameter \"arguments\" must not null. "); Assert.isTrue(arguments.length >= TWO , "Parameter \"arguments\" length must >= 2. "); Assert.notNull(arguments[ZERO], "Parameter \"arguments[0]\" must not null. "); Assert.notNull(arguments[ONE], "Parameter \"arguments[1]\" must not null. "); // Extract parameters. Class clazz = cast(arguments[ONE]); Object input = arguments[ZERO]; // Build context. T context = cast(BeanUtils.beanToBean(input, contextClass)); // Set some values. context.setArguments(arguments); context.setResultClass(clazz); P param = cast(input); context.setParam(param); // End. return context; } @Override public void pushTask(ImportExportContext

context) { // The import status: 0 unknown, 1 will import, 2 importing, 3 processing, 4 timeout(dead), 5 failure, 6 success // The export status: 0 unknown, 1 will export, 2 exporting, 3 processing, 4 timeout(dead), 5 failure, 6 success // Maybe implementation classes aren't necessary. } @Override public void preHandle(ImportExportContext

context) { // The empty implementation. } @Override public Object save(ImportExportContext

context) { // Maybe implementation classes aren't necessary. return null; } @Override public Object getResult(AsyncSupportContext context) { // Transform context object. ImportExportContext

nowContext = cast(context); // Get the result class. Class resultClass = nowContext.getResultClass(); Boolean async = nowContext.getAsync(); // Result type is string. if (CharSequence.class.isAssignableFrom(resultClass)) { if (async == null || !async) { return nowContext.getResultAddress(); } else { return nowContext.getResultMessage(); } } // Result type is map. else if (Map.class.isAssignableFrom(resultClass)) { Dict dict = Dict.of("taskId", nowContext.getTaskId()); dict.set("module", nowContext.getModule()); dict.set("status", nowContext.getStatus()); dict.set("beginTime", nowContext.getStatus()); dict.set("endTime", nowContext.getStatus()); dict.set("totalCount", nowContext.getTotalCount()); dict.set("successCount", nowContext.getSuccessCount()); dict.set("failureCount", nowContext.getFailureCount()); dict.set("resultAddress", nowContext.getResultAddress()); dict.set("resultMessage", nowContext.getResultMessage()); return dict; } // Result type is future. else if (Future.class.isAssignableFrom(resultClass)) { return nowContext.getFuture(); } // Others. else { // Convert bean to bean. return BeanUtils.beanToBean(context, resultClass); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy