com.aimluck.eip.services.social.ALSocialApplicationHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.aimluck.eip.services.social.ALSocialApplicationHandler.java

Source

/*
 * Aipo is a groupware program developed by Aimluck,Inc.
 * Copyright (C) 2004-2015 Aimluck,Inc.
 * http://www.aipo.com
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.aimluck.eip.services.social;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.services.resources.JetspeedResources;

import com.aimluck.eip.common.ALActivity;
import com.aimluck.eip.common.ALActivityCount;
import com.aimluck.eip.common.ALApplication;
import com.aimluck.eip.common.ALOAuthConsumer;
import com.aimluck.eip.http.HttpServletRequestLocator;
import com.aimluck.eip.orm.Database;
import com.aimluck.eip.orm.query.ResultList;
import com.aimluck.eip.services.social.gadgets.ALGadgetSpec;
import com.aimluck.eip.services.social.gadgets.ALOAuthService;
import com.aimluck.eip.services.social.model.ALActivityGetRequest;
import com.aimluck.eip.services.social.model.ALActivityPutRequest;
import com.aimluck.eip.services.social.model.ALApplicationGetRequest;
import com.aimluck.eip.services.social.model.ALApplicationPutRequest;
import com.aimluck.eip.services.social.model.ALOAuthConsumerPutRequest;

/**
 *
 */
public abstract class ALSocialApplicationHandler {

    private static final JetspeedLogger logger = JetspeedLogFactoryService
            .getLogger(ALSocialApplicationHandler.class.getName());

    public abstract ResultList<ALApplication> getApplicationList(ALApplicationGetRequest request);

    public abstract ALApplication getApplication(ALApplicationGetRequest request);

    public abstract void createApplication(ALApplicationPutRequest request);

    public abstract void updateApplication(String appId, ALApplicationPutRequest request);

    public abstract void deleteApplication(String... appIdList);

    public abstract void deleteApplication(List<String> appIdList);

    public abstract void enableApplication(String... appIdList);

    public abstract void enableApplication(List<String> appIdList);

    public abstract void disableApplication(String... appIdList);

    public abstract void disableApplication(List<String> appIdList);

    public abstract boolean checkApplicationAvailability(String appId);

    public abstract List<ALOAuthConsumer> getOAuthConsumer(String appId);

    public abstract void putOAuthConsumer(ALOAuthConsumerPutRequest request);

    public abstract String getContainerConfig(Property property);

    public abstract void putContainerConfig(Property property, String value);

    public abstract ResultList<ALActivity> getActivityList(ALActivityGetRequest request);

    public abstract ALActivity getActivity(ALActivityGetRequest request);

    public abstract ALActivityCount getActivityCount(ALActivityGetRequest request);

    public abstract void setAllReadActivity(String loginName);

    public abstract void setReadActivity(int activityId, String loginName);

    public abstract void createActivity(ALActivityPutRequest request);

    public abstract long getNextModuleId();

    public abstract void deleteUserData(String... loginNameList);

    public abstract void deleteUserData(List<String> loginNameList);

    protected abstract void daysFirstActivate(String uid);

    public static enum Property {

        LOCKED_DOMAIN_REQUIRED("lockedDomainRequired") {

            @Override
            public String defaultValue() {
                return "false";
            }
        },

        LOCKED_DOMAIN_SUFFIX("lockedDomainSuffix") {
            @Override
            public String defaultValue() {
                return "";
            }
        },

        UNLOCKED_DOMAIN("unLockedDomain") {
            @Override
            public String defaultValue() {
                return "";
            }
        },

        CACHE_GADGET_XML("cacheGadgetXml") {
            @Override
            public String defaultValue() {
                return "true";
            }
        },

        ACTIVITY_SAVE_LIMIT("activitySaveLimit") {
            @Override
            public String defaultValue() {
                return "30";
            }
        },

        CONTAINER_URL("containerUrl") {
            @Override
            public String defaultValue() {
                return JetspeedResources.getString("aipo.container.url");
            }

        };

        private final String property;

        private Property(String property) {
            this.property = property;
        }

        @Override
        public String toString() {
            return this.property;
        }

        public abstract String defaultValue();
    }

    protected String generateConsumerKey(String url) {
        return new StringBuilder(
                Database.getDomainName())
                        .append(":")
                        .append(new String(Base64.encodeBase64(DigestUtils.sha(new StringBuilder()
                                .append(System.nanoTime()).append("::").append(url).toString().getBytes())))
                                        .replace("=", ""))
                        .toString();
    }

    protected String generateConsumerSecret() {
        return DigestUtils
                .shaHex(new StringBuilder(UUID.randomUUID().toString()).append(System.nanoTime()).toString());
    }

    public ALGadgetSpec getMetaData(String specUrl) {
        return getMetaData(specUrl, false);
    }

    public ALGadgetSpec getMetaData(String specUrl, boolean isDetail) {
        List<String> specUrls = new ArrayList<String>();
        specUrls.add(specUrl);
        Map<String, ALGadgetSpec> metaData = getMetaData(specUrls, "home", isDetail, true);
        return metaData.get(specUrl);
    }

    public Map<String, ALGadgetSpec> getMetaData(List<String> specUrls) {
        return getMetaData(specUrls, "home", false, true);
    }

    protected String getMetaDataUrl() {
        String baseUrl = ALContainerConfigService.get(Property.CONTAINER_URL);
        if (baseUrl == null || baseUrl.length() == 0) {
            HttpServletRequest request = HttpServletRequestLocator.get();
            Integer port = request.getServerPort();
            String scheme = request.getScheme();
            String continerPath = JetspeedResources.getString("aipo.container.path");
            baseUrl = scheme + "://127.0.0.1:" + port + (continerPath == null ? "" : continerPath);
        }
        return baseUrl + "/gadgets/metadata";
    }

    public Map<String, ALGadgetSpec> getMetaData(List<String> specUrls, String view, boolean isDetail,
            boolean nocache) {
        Map<String, ALGadgetSpec> maps = new HashMap<String, ALGadgetSpec>();
        if (specUrls == null || specUrls.size() == 0) {
            return maps;
        }
        try {

            HttpClient httpClient = new HttpClient();
            httpClient.getParams().setParameter("http.connection.timeout", 10000);
            httpClient.getParams().setParameter("http.socket.timeout", 10000);
            PostMethod postMethod = new PostMethod(getMetaDataUrl());
            postMethod.addRequestHeader("Content-Type", "application/javascript");
            postMethod.addParameter("st", "default:st");
            postMethod.addParameter("req", "1");
            postMethod.addParameter("callback", "1");
            JSONObject jsonObject = new JSONObject();
            JSONObject context = new JSONObject();
            context.put("country", "JP");
            context.put("language", "ja");
            context.put("view", view == null ? "home" : view);
            context.put("container", "default");
            context.put("nocache", nocache ? 1 : 0);
            if (isDetail) {
                context.put("withDescription", "1");
                context.put("withOAuthService", "1");
            }
            JSONArray gadgets = new JSONArray();
            for (String specUrl : specUrls) {
                JSONObject gadget = new JSONObject();
                gadget.put("url", specUrl);
                gadget.put("moduleId", 1);
                gadgets.add(gadget);
            }
            jsonObject.put("context", context);
            jsonObject.put("gadgets", gadgets);
            postMethod.setRequestEntity(
                    new StringRequestEntity(jsonObject.toString(), "application/javascript", "UTF-8"));
            httpClient.executeMethod(postMethod);
            String result = postMethod.getResponseBodyAsString();
            JSONObject fromObject = JSONObject.fromObject(result);
            JSONArray jsonArray = (JSONArray) fromObject.get("gadgets");
            Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
            classMap.put("oauthService", ALOAuthService.class);
            classMap.put("userPrefs", HashMap.class);

            if (jsonArray == null) {
                return maps;
            }

            int size = jsonArray.size();
            for (int i = 0; i < size; i++) {
                try {
                    JSONObject object = jsonArray.getJSONObject(i);
                    Object e = object.get("errors");
                    if (e == null) {
                        ALGadgetSpec spec = (ALGadgetSpec) JSONObject.toBean(object, ALGadgetSpec.class, classMap);
                        maps.put(spec.getUrl(), spec);
                    }
                } catch (Throwable t) {
                    logger.warn("[ALSocialApplicationHandler]", t);
                }
            }
        } catch (Throwable t) {
            logger.warn("[ALSocialApplicationHandler]", t);
        }
        return maps;
    }
}