upload tizen2.0 alpha installmanager source
[sdk/installer/install-manager.git] / InstallManager_java / src / org / tizen / installmanager / core / SDKExtensionInfo.java
1 /*
2 *  InstallManager
3 *
4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5 *
6 * Contact: 
7 * Shihyun Kim <shihyun.kim@samsung.com>
8 * Yongsung kim <yongsung1.kim@samsung.com>
9
10  * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
13 *
14 * http://www.apache.org/licenses/LICENSE-2.0
15 *
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 *
22 * Contributors:
23 * - S-Core Co., Ltd
24 *
25 */ 
26
27 package org.tizen.installmanager.core;
28
29 import java.io.IOException;
30 import java.net.MalformedURLException;
31 import java.net.URL;
32 import java.util.LinkedHashMap;
33
34 import org.tizen.installmanager.lib.Log;
35 import org.tizen.installmanager.pkg.lib.PackageManager;
36 import org.tizen.installmanager.pkg.model.ConfigFile;
37 import org.tizen.installmanager.pkg.model.PackageSet;
38
39 /**
40  * This class can manages extension information
41  * 
42  * @author Shihyun Kim <shihyun.kim@samsung.com>
43  *
44  */
45 public class SDKExtensionInfo {
46         
47         private static SDKExtensionInfo sdkExtensionInfo = null;
48         //member variable
49         LinkedHashMap<String, String> userExtensionRepositories = new LinkedHashMap<String, String>();
50         LinkedHashMap<String, String> builtInExtensionRepositories = new LinkedHashMap<String, String>();
51         
52         //member func
53         private SDKExtensionInfo() {
54                 load();
55         }
56         
57         public boolean add(String name, String packageRepo) {
58                 if (name == null || !checkPackageRepo(packageRepo)) {
59                         return false;
60                         
61                 } else {                        
62                         if (contains(packageRepo)) {
63                                 return false;
64                         }
65                         userExtensionRepositories.put(packageRepo, name);
66                         return true;
67                 }
68         }
69         
70         public boolean contains(String packageRepo) {
71                 return userExtensionRepositories.containsKey(packageRepo);
72         }
73         
74         public boolean containsBuiltIn(String packageRepo) {
75                 return builtInExtensionRepositories.containsKey(packageRepo);
76         }
77         
78         public void remove(String packageRepo) {
79                 if (contains(packageRepo)) {
80                         userExtensionRepositories.remove(packageRepo);
81                 }
82         }
83         
84         public void save() {
85                 ConfigFile confFile = Config.getInstance().getConfigFile();
86                 
87                 confFile.setExtensionServer(userExtensionRepositories.toString());
88                 
89                 Config.getInstance().saveConfig();
90         }
91         
92         public void load() {
93                 String extensionInfo = Config.getInstance().getConfigFile().getExtensionServer();
94                 String builtInExtensionInfo = Config.getInstance().getConfigFile().getBuiltInExtensionServer();
95                 
96                 builtInExtensionRepositories = parseLocationInformationToMap(builtInExtensionInfo);
97                 userExtensionRepositories = parseLocationInformationToMap(extensionInfo);
98         }
99         
100         public boolean checkPackageRepo(String packageRepo) {
101                 try {
102                         new URL(packageRepo);
103                         return true;
104                 } catch (MalformedURLException e) {
105                         Log.err("Extension package server is not URL format.(" + packageRepo +")");
106                         return false;
107                 }
108         }
109         
110         private LinkedHashMap<String, String> parseLocationInformationToMap(String info) {
111                 LinkedHashMap<String, String> extensionInformation = new LinkedHashMap<String, String>();
112                 if (info.startsWith("{")) {
113                         info = info.substring(1);
114                 }
115                 
116                 if (info.endsWith("}")) {
117                         info = info.substring(0, info.length() -1);
118                 }
119                 
120                 String[] properties = info.split(",");
121                 
122                 for(String property : properties) {
123                         String[] nameValue = property.split("=");
124                         
125                         if (nameValue.length == 2) {
126                                 extensionInformation.put(nameValue[0], nameValue[1]);
127                         }
128                 }
129                 return extensionInformation;
130         }
131         
132         public PackageSet getExtensionPackages() {
133                 PackageManager pm = PackageManager.getInstance();
134                 
135                 if (pm == null) {
136                         return PackageSet.EMPTY;
137                 } else {
138                         try {
139                                 //Get all extension repositories.
140                                 LinkedHashMap<String, String> extensionRepositories = new LinkedHashMap<String, String>();
141                                 extensionRepositories.putAll(builtInExtensionRepositories);
142                                 extensionRepositories.putAll(userExtensionRepositories);
143                                 
144                                 pm.loadExtensionPackages(extensionRepositories.keySet());
145                                 return pm.getRootMetaPackagesOfExtensionServer();
146                                 
147                         } catch (IOException e) {
148                                 Log.ExceptionLog(e);
149                                 return PackageSet.EMPTY;
150                         }
151                 }
152         }
153         
154         public LinkedHashMap<String, String> getExtensionRepositories() {
155                 return userExtensionRepositories;
156         }
157         
158         public LinkedHashMap<String, String> getBuiltInExtensionRepositories() {
159                 return builtInExtensionRepositories;
160         }
161         
162         public static SDKExtensionInfo getInstance() {
163                 if (sdkExtensionInfo == null) {
164                         sdkExtensionInfo = new SDKExtensionInfo();
165                 }
166                 
167                 return sdkExtensionInfo;
168         }
169 }