package com.taobao.easyweb.core.app;
import com.taobao.easyweb.core.app.change.AppChangeAdapter;
import java.util.*;
public class AppContainer extends AppChangeAdapter {
private static Map<String, App> deployedApps = new HashMap<String, App>();
private static Map<String, Set<String>> appVersions = new HashMap<String, Set<String>>();
private static Map<String, String> currentAppVersion = new HashMap<String, String>();
public static void setCurrentVersion(String appName, String appVersion) {
Set<String> versions = getAppVersions(appName);
if (versions.contains(appVersion)) {
currentAppVersion.put(appName, appVersion);
}
}
public static Set<String> getAppVersions(String appName) {
Set<String> versions = appVersions.get(appName);
if (versions == null) {
versions = new HashSet<String>();
}
return versions;
}
/**
* ����uri������app
*
* @param domain
* @param uri
* @return
*/
public static App getAppInfo(String domain, String uri) {
String[] v = uri.split("/");
String app = v[1];
if (app.equals("ewassets")) {// ����assets����
app = "assets";
}
String version = currentAppVersion.get(app);
if (version == null) {
version = "1.0";
}
return deployedApps.get(app + "-" + version);
}
public static App getApp(String appName) {
return getApp(appName, null);
}
public static App getApp(String appName, String version) {
if (version != null) {
App app = deployedApps.get(appName + "-" + version);
if (app != null) {
return app;
}
}
if (version == null) {
version = currentAppVersion.get(appName);
}
return deployedApps.get(appName + "-" + version);
}
public static String getCurrentVersion(String appName) {
String version = currentAppVersion.get(appName);
if (version == null) {
version = "1.0";
}
return version;
}
/**
* ��ע��app������û�������κ���Ϣ
*
* @param appInfo
*/
public static void regist(App appInfo) {
appInfo.setStatus(0);
deployedApps.put(appInfo.getAppKey(), appInfo);
}
public static Collection<App> getApps() {
return deployedApps.values();
}
@Override
public void remove(App app) {
app.setStatus(-1);
deployedApps.put(app.getAppKey(), app);
}
@Override
public void stop(App app) {
app.setStatus(0);
deployedApps.put(app.getAppKey(), app);
}
@Override
public void start(App appInfo) {
Set<String> versions = getAppVersions(appInfo.getName());
if (!versions.contains(appInfo.getVersion())) {
versions.add(appInfo.getVersion());
}
if (!currentAppVersion.containsKey(appInfo.getName())) {
currentAppVersion.put(appInfo.getName(), appInfo.getVersion());
}
appInfo.setStatus(1);
deployedApps.put(appInfo.getAppKey(), appInfo);
}
public void deployError(App app) {
app.setStatus(2);
deployedApps.put(app.getAppKey(), app);
}
}