Revision 1120 org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/DefaultScriptingManager.java
DefaultScriptingManager.java | ||
---|---|---|
10 | 10 |
import java.util.List; |
11 | 11 |
import java.util.Map; |
12 | 12 |
import java.util.Set; |
13 |
import java.util.regex.Matcher; |
|
14 |
import java.util.regex.Pattern; |
|
13 | 15 |
|
14 | 16 |
import javax.script.ScriptContext; |
15 | 17 |
import javax.script.ScriptEngine; |
... | ... | |
17 | 19 |
import javax.script.ScriptEngineManager; |
18 | 20 |
import javax.script.SimpleBindings; |
19 | 21 |
import javax.swing.ImageIcon; |
22 |
import org.apache.commons.io.IOUtils; |
|
20 | 23 |
|
21 | 24 |
import org.apache.commons.lang3.StringUtils; |
22 | 25 |
import org.gvsig.scripting.DataFolderFound; |
... | ... | |
28 | 31 |
import org.gvsig.scripting.ScriptingScript; |
29 | 32 |
import org.gvsig.scripting.ScriptingUnit; |
30 | 33 |
import org.gvsig.tools.packageutils.Version; |
34 |
import org.gvsig.tools.resourcesstorage.ResourcesStorage; |
|
31 | 35 |
import org.gvsig.tools.script.Script; |
32 | 36 |
import org.gvsig.tools.service.spi.ProviderFactory; |
33 | 37 |
import org.gvsig.tools.util.FolderSet; |
... | ... | |
313 | 317 |
|
314 | 318 |
@Override |
315 | 319 |
public Script createScript(String name, String code, String languaje) { |
316 |
ScriptingScript script = new DefaultScriptingScript(this.getUserFolder(), this, name); |
|
320 |
ScriptingScript script = new DefaultScriptingScript(this.getUserFolder(), this, name, languaje);
|
|
317 | 321 |
script.setCode(code); |
318 | 322 |
script.setSaved(true); |
319 | 323 |
return script; |
... | ... | |
381 | 385 |
} |
382 | 386 |
} |
383 | 387 |
|
388 |
private static final Pattern RE_LANG = Pattern.compile(".*lang[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)"); |
|
389 |
private static final Pattern RE_ENCODING = Pattern.compile(".*encoding[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)"); |
|
390 |
|
|
391 |
public Script loadScript(ResourcesStorage storage, String name) { |
|
392 |
ResourcesStorage.Resource res = null; |
|
393 |
try { |
|
394 |
if( storage==null ) { |
|
395 |
return null; |
|
396 |
} |
|
397 |
res = storage.getResource(name); |
|
398 |
if( res == null || !res.exists() ) { |
|
399 |
return null; |
|
400 |
} |
|
401 |
byte[] head_bytes = new byte[500]; |
|
402 |
IOUtils.read(res.asInputStream(), head_bytes); |
|
403 |
IOUtils.closeQuietly(res); |
|
404 |
String head = new String(head_bytes); |
|
405 |
if( StringUtils.isEmpty(head) ) { |
|
406 |
return null; |
|
407 |
} |
|
408 |
head = StringUtils.split("\n")[0]; |
|
409 |
|
|
410 |
String lang = "python"; |
|
411 |
String encoding = null; |
|
412 |
Matcher m = RE_LANG.matcher(head); |
|
413 |
if( m.groupCount()==1 ) { |
|
414 |
String s = m.group(1); |
|
415 |
if( !StringUtils.isBlank(s) ) { |
|
416 |
lang = s; |
|
417 |
} |
|
418 |
} |
|
419 |
m = RE_ENCODING.matcher(head); |
|
420 |
if( m.groupCount()==1 ) { |
|
421 |
String s = m.group(1); |
|
422 |
if( !StringUtils.isBlank(s) ) { |
|
423 |
encoding = s; |
|
424 |
} |
|
425 |
} |
|
384 | 426 |
|
427 |
String source; |
|
428 |
if( StringUtils.isBlank(encoding) ) { |
|
429 |
source = IOUtils.toString(res.asInputStream()); |
|
430 |
} else { |
|
431 |
source = IOUtils.toString(res.asInputStream(), encoding); |
|
432 |
} |
|
433 |
Script script = this.createScript(name, source, lang); |
|
434 |
return script; |
|
435 |
} catch (Exception ex) { |
|
436 |
LOG.warn("Can't load script from resources storage.", ex); |
|
437 |
return null; |
|
438 |
} finally { |
|
439 |
IOUtils.closeQuietly(res); |
|
440 |
} |
|
441 |
} |
|
385 | 442 |
|
386 | 443 |
@Override |
387 | 444 |
public ScriptingFolder getFolder(File file) { |
Also available in: Unified diff