/******************************************************************************* * Copyright (c) 2013 GigaSpaces Technologies Ltd. All rights reserved * * 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 * * 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.cloudifysource.rest; import java.io.File; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; import org.cloudifysource.domain.cloud.Cloud; import org.cloudifysource.domain.cloud.compute.ComputeTemplate; import org.cloudifysource.rest.util.RestPollingRunnable; import org.cloudifysource.security.CustomPermissionEvaluator; import org.cloudifysource.utilitydomain.data.CloudConfigurationHolder; import org.openspaces.admin.Admin; import org.openspaces.core.GigaSpace; /** * * @author yael * */ public class RestConfiguration { private static final int THREAD_POOL_SIZE = 20; private GigaSpace gigaSpace; private Admin admin; private Cloud cloud = null; private CloudConfigurationHolder cloudConfigurationHolder; private File cloudConfigurationDir; private String defaultTemplateName; private ComputeTemplate managementTemplate; private String managementTemplateName; private final AtomicInteger lastTemplateFileNum = new AtomicInteger(0); private File restTempFolder; private CustomPermissionEvaluator permissionEvaluator; private File additionalTemplatesFolder; /** * A set containing all of the executed lifecycle events. used to avoid duplicate prints. */ private final Set<String> eventsSet = new HashSet<String>(); private final Map<UUID, RestPollingRunnable> lifecyclePollingThreadContainer = new ConcurrentHashMap<UUID, RestPollingRunnable>(); private final ScheduledExecutorService scheduledExecutor = Executors .newScheduledThreadPool(10, new ThreadFactory() { private final AtomicInteger threadNumber = new AtomicInteger(1); @Override public Thread newThread(final Runnable r) { final Thread thread = new Thread(r, "LifecycleEventsPollingExecutor-" + threadNumber.getAndIncrement()); thread.setDaemon(true); return thread; } }); // Set up a small thread pool with daemon threads. private final ExecutorService executorService = Executors .newFixedThreadPool(THREAD_POOL_SIZE, new ThreadFactory() { private final AtomicInteger threadNumber = new AtomicInteger(1); @Override public Thread newThread(final Runnable r) { final Thread thread = new Thread(r, "ServiceControllerExecutor-" + threadNumber.getAndIncrement()); thread.setDaemon(true); return thread; } }); public GigaSpace getGigaSpace() { return gigaSpace; } public void setGigaSpace(final GigaSpace gigaSpace) { this.gigaSpace = gigaSpace; } public Admin getAdmin() { return admin; } public void setAdmin(final Admin admin) { this.admin = admin; } public Cloud getCloud() { return cloud; } public void setCloud(final Cloud cloud) { this.cloud = cloud; } public CloudConfigurationHolder getCloudConfigurationHolder() { return cloudConfigurationHolder; } public void setCloudConfigurationHolder(final CloudConfigurationHolder cloudConfigurationHolder) { this.cloudConfigurationHolder = cloudConfigurationHolder; } public File getCloudConfigurationDir() { return cloudConfigurationDir; } public void setCloudConfigurationDir(final File cloudConfigurationDir) { this.cloudConfigurationDir = cloudConfigurationDir; } public String getDefaultTemplateName() { return defaultTemplateName; } public void setDefaultTemplateName(final String defaultTemplateName) { this.defaultTemplateName = defaultTemplateName; } public ComputeTemplate getManagementTemplate() { return managementTemplate; } public void setManagementTemplate(final ComputeTemplate managementTemplate) { this.managementTemplate = managementTemplate; } public String getManagementTemplateName() { return managementTemplateName; } public void setManagementTemplateName(final String managementTemplateName) { this.managementTemplateName = managementTemplateName; } public AtomicInteger getLastTemplateFileNum() { return lastTemplateFileNum; } public File getRestTempFolder() { return restTempFolder; } public void setRestTempFolder(final File restTempFolder) { this.restTempFolder = restTempFolder; } public Set<String> getEventsSet() { return eventsSet; } public Map<UUID, RestPollingRunnable> getLifecyclePollingThreadContainer() { return lifecyclePollingThreadContainer; } public ScheduledExecutorService getScheduledExecutor() { return scheduledExecutor; } public ExecutorService getExecutorService() { return executorService; } public CustomPermissionEvaluator getPermissionEvaluator() { return permissionEvaluator; } public void setPermissionEvaluator(final CustomPermissionEvaluator permissionEvaluator) { this.permissionEvaluator = permissionEvaluator; } public File getAdditionalTempaltesFolder() { return additionalTemplatesFolder; } public void setAdditionalTemplatesFolder(final File additionalTemplatesFolder) { this.additionalTemplatesFolder = additionalTemplatesFolder; } }