/*
* Copyright 2004-2012 the Seasar Foundation and the Others.
*
* 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.seasar.mayaa.impl.engine;
import java.io.IOException;
import org.seasar.mayaa.FactoryFactory;
import org.seasar.mayaa.cycle.scope.ApplicationScope;
import org.seasar.mayaa.engine.Engine;
import org.seasar.mayaa.engine.Page;
import org.seasar.mayaa.engine.Template;
import org.seasar.mayaa.engine.processor.ProcessorTreeWalker;
import org.seasar.mayaa.engine.specification.NodeTreeWalker;
import org.seasar.mayaa.engine.specification.Specification;
import org.seasar.mayaa.impl.CONST_IMPL;
import org.seasar.mayaa.impl.cycle.CycleUtil;
import org.seasar.mayaa.impl.engine.specification.SpecificationUtil;
import org.seasar.mayaa.impl.provider.ProviderUtil;
import org.seasar.mayaa.impl.source.SourceUtil;
import org.seasar.mayaa.impl.util.ObjectUtil;
import org.seasar.mayaa.source.SourceDescriptor;
/**
* @author Masataka Kurihara (Gluegent, Inc.)
*/
public class EngineUtil implements CONST_IMPL {
private EngineUtil() {
// no instantiation.
}
private static String _mayaaExtensionName;
/**
* 現在デバッグモードかどうかを返します。
* @return 現在がデバッグモードなら{@code true}、そうでなければ{@code false}。
*/
public static boolean isDebugMode() {
ApplicationScope scope = FactoryFactory.getApplicationScope();
if (scope != null) {
return ObjectUtil.booleanValue(scope.getAttribute(DEBUG), false);
}
return false;
}
public static boolean isClientAbortException(Throwable t) {
if (t instanceof IOException) {
IOException e = (IOException) t;
String simpleClassName = ObjectUtil.getSimpleClassName(e.getClass());
switch (simpleClassName.charAt(0)) {
case 'E':
return simpleClassName.equals("EOFException");
case 'C':
return simpleClassName.equals("ClientAbortException");
}
}
return false;
}
/**
* 高速化のため、Mayaaファイルの拡張子("."を含まない)を{@EngineUtil}内に
* キャッシュします。
*
* @return Mayaaファイルの拡張子("."を含まない)
*/
public static String getMayaaExtensionName() {
if (_mayaaExtensionName == null) {
renewMayaaExtensionName();
}
return _mayaaExtensionName;
}
public static void renewMayaaExtensionName() {
_mayaaExtensionName =
getEngineSetting(MAYAA_EXTENSION, ".mayaa").substring(1);
}
public static String getEngineSetting(
String name, String defaultValue) {
Engine engine = ProviderUtil.getEngine();
String value = engine.getParameter(name);
if (value != null) {
return value;
}
return defaultValue;
}
public static boolean getEngineSettingBoolean(
String name, boolean defaultValue) {
Engine engine = ProviderUtil.getEngine();
String value = engine.getParameter(name);
return ObjectUtil.booleanValue(value, defaultValue);
}
public static String getSourcePath() {
Specification spec = SpecificationUtil.findSpecification();
if (spec == null) {
String path = CycleUtil.getServiceCycle().getRequestScope().getRequestedPath();
SourceDescriptor source = SourceUtil.getSourceDescriptor(path);
return source.getSystemID();
}
return spec.getSystemID();
}
public static String getSourcePath(ProcessorTreeWalker proc) {
for (ProcessorTreeWalker current = proc;
current != null; current = current.getStaticParentProcessor()) {
if (current instanceof Template) {
return ((Template) current).getSystemID();
}
}
throw new IllegalStateException("unknown sourcePath from processor");
}
public static String getSourcePath(NodeTreeWalker node) {
return node.getSystemID();
}
public static Template getTemplate() {
Specification spec = SpecificationUtil.findSpecification();
if (spec instanceof Page) {
NodeTreeWalker parent = spec.getParentNode();
if (parent != null) {
spec = SpecificationUtil.findSpecification();
} else {
return null;
}
}
if (spec instanceof Template) {
return (Template) spec;
}
throw new IllegalStateException("template not found");
}
public static Template getTemplate(ProcessorTreeWalker proc) {
for (ProcessorTreeWalker current = proc;
current != null; current = current.getStaticParentProcessor()) {
if (current instanceof Template) {
return (Template) current;
}
}
throw new IllegalStateException("template not found from current processor");
}
public static Specification getParentSpecification(Specification spec) {
return ProviderUtil.getParentSpecificationResolver().getParentSpecification(spec);
}
}