1515import org .eclipse .core .runtime .preferences .IScopeContext ;
1616import org .osgi .service .prefs .BackingStoreException ;
1717
18- import com .google .common .base .Optional ;
19-
2018import cc .codechecker .api .config .Config .ConfigTypes ;
2119import cc .codechecker .api .runtime .CodeCheckEnvironmentChecker ;
2220import cc .codechecker .api .runtime .CodecheckerServerThread ;
3129import org .apache .log4j .Logger ;
3230import org .apache .log4j .Level ;
3331import org .apache .log4j .LogManager ;
34-
3532
3633public class CcConfiguration {
3734
@@ -40,30 +37,26 @@ public class CcConfiguration {
4037 IProject project ;
4138 IEclipsePreferences projectPreferences ;
4239 static final IEclipsePreferences globalPreferences = ConfigurationScope .INSTANCE .getNode (CodeCheckerNature .NATURE_ID );
43-
40+
4441 private static Map <ConfigTypes ,String > defaults ;//default config values
4542 private static Map <ConfigTypes ,String > configKeys ;//textual values of config variables
4643
47-
48-
4944 public CcConfiguration (IProject project ) {
5045 super ();
51-
46+
5247 defaults =new HashMap <ConfigTypes ,String >();
5348 defaults .put (ConfigTypes .COMPILERS ,"gcc:g++:clang" );
5449 defaults .put (ConfigTypes .ANAL_THREADS ,"4" );
5550 defaults .put (ConfigTypes .IS_GLOBAL ,"true" );
5651
57-
58- configKeys =new HashMap <ConfigTypes ,String >();
52+ configKeys =new HashMap <ConfigTypes ,String >();
5953 configKeys .put (ConfigTypes .CHECKER_PATH ,"global_server_url" );
6054 configKeys .put (ConfigTypes .PYTHON_PATH ,"location_prefix" );
6155 configKeys .put (ConfigTypes .COMPILERS ,"compilers" );
62- configKeys .put (ConfigTypes .ANAL_THREADS ,"analthreads" );
63- configKeys .put (ConfigTypes .CHECKER_LIST ,"global_checker_command" );
56+ configKeys .put (ConfigTypes .ANAL_THREADS ,"analthreads" );
57+ configKeys .put (ConfigTypes .CHECKER_LIST ,"global_checker_command" );
6458 configKeys .put (ConfigTypes .IS_GLOBAL ,"is_global" );
6559 configKeys .put (ConfigTypes .CHECKER_WORKSPACE ,"checker_workspace" );
66-
6760
6861 this .project = project ;
6962
@@ -106,138 +99,138 @@ public String getServerUrl() {
10699 return "" ;
107100 }
108101 }
109-
102+
110103 public IEclipsePreferences getProjectPreferences (){
111- return projectPreferences ;
104+ return projectPreferences ;
112105 }
113106
114107 public static IEclipsePreferences getGlobalPreferences (){
115- return globalPreferences ;
108+ return globalPreferences ;
116109 }
117-
110+
118111 public IEclipsePreferences getActivePreferences (){
119- if (getGlobal ())
120- return globalPreferences ;
121- else
122- return projectPreferences ;
112+ if (getGlobal ())
113+ return globalPreferences ;
114+ else
115+ return projectPreferences ;
123116 }
124-
125- public Map <ConfigTypes , String > getProjectConfig () {
126- logger .log (Level .DEBUG , "returning project config" );
127- return getConfig (projectPreferences );
128- }
129-
130- public static Map <ConfigTypes , String > getGlobalConfig () {
131- logger .log (Level .DEBUG , "returning global config" );
132- return getConfig (globalPreferences );
133- }
134- public static Map <ConfigTypes , String > getDefaultConfig () {
135- Map <ConfigTypes , String > ret = new HashMap <ConfigTypes , String >();
136- for (ConfigTypes k :ConfigTypes .values ()){
137- if (defaults .containsKey (k ))
138- ret .put (k ,defaults .get (k ));
139- else
140- ret .put (k ,"" );
141- }
142- return ret ;
143- }
144-
145- public static Map <ConfigTypes , String > getConfig (IEclipsePreferences pref ) {
146- Map <ConfigTypes , String > ret = new HashMap <ConfigTypes , String >();
147- for (ConfigTypes k :ConfigTypes .values ()){
148- if (defaults .containsKey (k ))
149- ret .put (k ,defaults .get (k ));
150- else
151- ret .put (k ,"" );
152- }
153-
154- try {
155- for (String configKey : pref .keys ()) {
156- for (ConfigTypes c : configKeys .keySet ()) {
157- if (configKey .equals (configKeys .get (c ))){
158- ret .put (c , pref .get (configKey , "" ));
159- }
160- }
161- }
162- } catch (BackingStoreException e ) {
163- }
164-
165-
166- for (ConfigTypes c : configKeys .keySet ()) {
167- logger .log (Level .DEBUG , "Config " +configKeys .get (c )+":" +pref .get (configKeys .get (c ), "" ));
168- }
169-
170- return ret ;
171- }
172-
173- public Map <ConfigTypes , String > getActiveConfig () {
174- if (getGlobal ())
175- return getGlobalConfig ();
176- else
177- return getProjectConfig ();
178- }
179-
180- public void dumpConfig (Map <ConfigTypes , String > config ) {
181- logger .log (Level .DEBUG , "Config:" );
182- for (Map .Entry <ConfigTypes , String > entry : config .entrySet ()) {
183- logger .log (Level .DEBUG , configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
184- }
185- }
186-
187- public boolean getGlobal () {
188- return (projectPreferences .get (configKeys .get (ConfigTypes .IS_GLOBAL ), "true" ).equals ("true" ));
117+
118+ public Map <ConfigTypes , String > getProjectConfig () {
119+ logger .log (Level .DEBUG , "returning project config" );
120+ return getConfig (projectPreferences );
121+ }
122+
123+ public static Map <ConfigTypes , String > getGlobalConfig () {
124+ logger .log (Level .DEBUG , "returning global config" );
125+ return getConfig (globalPreferences );
126+ }
127+ public static Map <ConfigTypes , String > getDefaultConfig () {
128+ Map <ConfigTypes , String > ret = new HashMap <ConfigTypes , String >();
129+ for (ConfigTypes k :ConfigTypes .values ()){
130+ if (defaults .containsKey (k ))
131+ ret .put (k ,defaults .get (k ));
132+ else
133+ ret .put (k ,"" );
134+ }
135+ return ret ;
136+ }
137+
138+ public static Map <ConfigTypes , String > getConfig (IEclipsePreferences pref ) {
139+ Map <ConfigTypes , String > ret = new HashMap <ConfigTypes , String >();
140+ for (ConfigTypes k :ConfigTypes .values ()){
141+ if (defaults .containsKey (k ))
142+ ret .put (k ,defaults .get (k ));
143+ else
144+ ret .put (k ,"" );
145+ }
146+
147+ try {
148+ for (String configKey : pref .keys ()) {
149+ for (ConfigTypes c : configKeys .keySet ()) {
150+ if (configKey .equals (configKeys .get (c ))){
151+ ret .put (c , pref .get (configKey , "" ));
152+ }
153+ }
154+ }
155+ } catch (BackingStoreException e ) {
156+ }
157+
158+
159+ for (ConfigTypes c : configKeys .keySet ()) {
160+ logger .log (Level .DEBUG , "Config " +configKeys .get (c )+":" +pref .get (configKeys .get (c ), "" ));
161+ }
162+
163+ return ret ;
164+ }
165+
166+ public Map <ConfigTypes , String > getActiveConfig () {
167+ if (getGlobal ())
168+ return getGlobalConfig ();
169+ else
170+ return getProjectConfig ();
171+ }
172+
173+ public void dumpConfig (Map <ConfigTypes , String > config ) {
174+ logger .log (Level .DEBUG , "Config:" );
175+ for (Map .Entry <ConfigTypes , String > entry : config .entrySet ()) {
176+ logger .log (Level .DEBUG , configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
177+ }
189178 }
190-
179+
180+ public boolean getGlobal () {
181+ return (projectPreferences .get (configKeys .get (ConfigTypes .IS_GLOBAL ), "true" ).equals ("true" ));
182+ }
183+
191184 public void updateProject (Map <ConfigTypes ,String > newConfig ){
192- for (Map .Entry <ConfigTypes , String > entry : newConfig .entrySet ())
193- {
194- System .out .println (configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
195- logger .log (Level .DEBUG , "updateProject(): " + configKeys .get (entry .getKey ()) +":" +entry .getValue ());
196- projectPreferences .put (configKeys .get (entry .getKey ()), entry .getValue ());
197- }
198- try {
185+ for (Map .Entry <ConfigTypes , String > entry : newConfig .entrySet ())
186+ {
187+ System .out .println (configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
188+ logger .log (Level .DEBUG , "updateProject(): " + configKeys .get (entry .getKey ()) +":" +entry .getValue ());
189+ projectPreferences .put (configKeys .get (entry .getKey ()), entry .getValue ());
190+ }
191+ try {
199192 projectPreferences .flush ();
200193 updateServer (project , CodeCheckerContext .getInstance ().getServerObject (project ));
201194 } catch (BackingStoreException e ) {
202195 }
203196 }
204-
197+
205198
206199 //adds invariable configuration
207200 public void addConstatConfig (){
208- String workDir =ResourcesPlugin .getWorkspace ().getRoot ().getLocation ().toString ()+ "/.codechecker/" +
209- project .getName ();
210-
201+ String workDir =ResourcesPlugin .getWorkspace ().getRoot ().getLocation ().toString ()+ "/.codechecker/" +
202+ project .getName ();
203+
211204 }
212205 public static boolean isCDTProject (IProject p ){
213- return CoreModel .getDefault ().getProjectDescription (p , true )!=null ;
206+ return CoreModel .getDefault ().getProjectDescription (p , true )!=null ;
214207 }
215208
216- public static void updateGlobal (Map <ConfigTypes , String > newConfig ) {
217- for (Map .Entry <ConfigTypes , String > entry : newConfig .entrySet ()) {
218- System .out .println (configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
219- logger .log (Level .DEBUG , "updateGlobal(): " + configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
220- globalPreferences .put (configKeys .get (entry .getKey ()), entry .getValue ());
221- }
222-
223- IProject [] projects = ResourcesPlugin .getWorkspace ().getRoot ().getProjects ();
224- for (IProject project : projects ) {
225- try {
226- if (project .hasNature (CodeCheckerNature .NATURE_ID ) && isCDTProject (project ) ) {
227- CcConfiguration cc = new CcConfiguration (project );
228- if (cc .getGlobal ()) {
229- cc .updateServer (project , CodeCheckerContext .getInstance ().getServerObject (project ));
230- }
231- }
232- } catch (CoreException e ) {
233- // TODO Auto-generated catch block
234- }
235- }
236- try {
237- globalPreferences .flush ();
238- } catch (BackingStoreException e ) {
239- }
240- }
209+ public static void updateGlobal (Map <ConfigTypes , String > newConfig ) {
210+ for (Map .Entry <ConfigTypes , String > entry : newConfig .entrySet ()) {
211+ System .out .println (configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
212+ logger .log (Level .DEBUG , "updateGlobal(): " + configKeys .get (entry .getKey ()) + ":" + entry .getValue ());
213+ globalPreferences .put (configKeys .get (entry .getKey ()), entry .getValue ());
214+ }
215+
216+ IProject [] projects = ResourcesPlugin .getWorkspace ().getRoot ().getProjects ();
217+ for (IProject project : projects ) {
218+ try {
219+ if (project .hasNature (CodeCheckerNature .NATURE_ID ) && isCDTProject (project ) ) {
220+ CcConfiguration cc = new CcConfiguration (project );
221+ if (cc .getGlobal ()) {
222+ cc .updateServer (project , CodeCheckerContext .getInstance ().getServerObject (project ));
223+ }
224+ }
225+ } catch (CoreException e ) {
226+ // TODO Auto-generated catch block
227+ }
228+ }
229+ try {
230+ globalPreferences .flush ();
231+ } catch (BackingStoreException e ) {
232+ }
233+ }
241234
242235 public String convertFilenameToServer (String projectRelativeFile ) {
243236 return getLocationPrefix () + projectRelativeFile ;
@@ -258,45 +251,45 @@ public String convertFilenameFromServer(String serverFile) {
258251 public boolean isConfigured () {
259252 try {
260253 if (project .hasNature (CodeCheckerNature .NATURE_ID )&& isCDTProject (project ) ) {
261- CodeCheckEnvironmentChecker ccec = CodeCheckerContext .getInstance ().getServerObject (project )
262- .getCodecheckerEnvironment ();
263- if (ccec != null ) {
264- return ccec .isJavaRunner (CodeCheckerContext .getInstance ().getServerObject (project ).serverPort );
265- }
266- return false ;
267- }
268- return false ;
269- } catch (CoreException e ) {
270- return false ;
271- }
272- }
273-
274- public void updateServer (IProject project , CodecheckerServerThread server ) {
275- logger .log (Level .DEBUG , "Updating Server" + project .getName ());
276- Map <ConfigTypes , String > config = getActiveConfig ();
277- config .put (ConfigTypes .CHECKER_WORKSPACE , ResourcesPlugin .getWorkspace ().getRoot ().getLocation ().toString ()
278- + "/.codechecker/" + project .getName ());// codechecker workspace
279- dumpConfig (config );
280- try {
281- File workDir = new File (ResourcesPlugin .getWorkspace ().getRoot ().getLocation ().toString () + "/.codechecker/"
282- + project .getName ());
283- if (!workDir .exists ()) {
284- workDir .mkdir ();
285- }
286- logger .log (Level .INFO , "Restarting server : " + project .getName ());
287- CodeCheckEnvironmentChecker ccec = new CodeCheckEnvironmentChecker (config );
288- modifyProjectEnvironmentVariables (project , ccec .getEnvironmentAddList ());
289- server .setCodecheckerEnvironment (ccec );
290- ConsoleFactory .consoleWrite (
291- project .getName () + ": CodeChecker server listening on port: " + server .serverPort );
292-
293- } catch (Exception e ) {
294- ConsoleFactory .consoleWrite (project .getName () + ": Failed to start server " + e .getStackTrace ().toString ());
295- System .out .println ("Failed to start server:" );
296- e .printStackTrace ();
297- logger .log (Level .ERROR , "SERVER_GUI_MSG >> " + e );
298- logger .log (Level .DEBUG , "SERVER_GUI_MSG >> " + e .getStackTrace ());
299- }
300- }
254+ CodeCheckEnvironmentChecker ccec = CodeCheckerContext .getInstance ().getServerObject (project )
255+ .getCodecheckerEnvironment ();
256+ if (ccec != null ) {
257+ return ccec .isJavaRunner (CodeCheckerContext .getInstance ().getServerObject (project ).serverPort );
258+ }
259+ return false ;
260+ }
261+ return false ;
262+ } catch (CoreException e ) {
263+ return false ;
264+ }
265+ }
266+
267+ public void updateServer (IProject project , CodecheckerServerThread server ) {
268+ logger .log (Level .DEBUG , "Updating Server" + project .getName ());
269+ Map <ConfigTypes , String > config = getActiveConfig ();
270+ config .put (ConfigTypes .CHECKER_WORKSPACE , ResourcesPlugin .getWorkspace ().getRoot ().getLocation ().toString ()
271+ + "/.codechecker/" + project .getName ());// codechecker workspace
272+ dumpConfig (config );
273+ try {
274+ File workDir = new File (ResourcesPlugin .getWorkspace ().getRoot ().getLocation ().toString () + "/.codechecker/"
275+ + project .getName ());
276+ if (!workDir .exists ()) {
277+ workDir .mkdir ();
278+ }
279+ logger .log (Level .INFO , "Restarting server : " + project .getName ());
280+ CodeCheckEnvironmentChecker ccec = new CodeCheckEnvironmentChecker (config );
281+ modifyProjectEnvironmentVariables (project , ccec .getEnvironmentAddList ());
282+ server .setCodecheckerEnvironment (ccec );
283+ ConsoleFactory .consoleWrite (
284+ project .getName () + ": CodeChecker server listening on port: " + server .serverPort );
285+
286+ } catch (Exception e ) {
287+ ConsoleFactory .consoleWrite (project .getName () + ": Failed to start server " + e .getStackTrace ().toString ());
288+ System .out .println ("Failed to start server:" );
289+ e .printStackTrace ();
290+ logger .log (Level .ERROR , "SERVER_GUI_MSG >> " + e );
291+ logger .log (Level .DEBUG , "SERVER_GUI_MSG >> " + e .getStackTrace ());
292+ }
293+ }
301294
302295}
0 commit comments