package com.cfsoft.ofbiz.dom.controller.model;
import com.cfsoft.ofbiz.dom.controller.api.Controller;
import com.cfsoft.ofbiz.dom.controller.api.RequestMap;
import com.cfsoft.ofbiz.dom.controller.api.Response;
import com.cfsoft.ofbiz.dom.controller.api.ViewMap;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.PsiClass;
import com.intellij.psi.xml.XmlFile;
import com.intellij.util.Function;
import com.intellij.util.NotNullFunction;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.xml.DomFileElement;
import com.intellij.util.xml.model.impl.DomModelImpl;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.List;
import java.util.Set;
public class ControllerModelImpl extends DomModelImpl<Controller> implements ControllerModel {
private static final NotNullFunction<DomFileElement<Controller>, Controller> ROOT_ELEMENT_MAPPER =
new NotNullFunction<DomFileElement<Controller>, Controller>() {
@NotNull
public Controller fun(final DomFileElement<Controller> strutsRootDomFileElement) {
return strutsRootDomFileElement.getRootElement();
}
};
private static final Function<Controller, Collection<? extends RequestMap>> REQUSET_MAP_COLLECTOR =
new Function<Controller, Collection<? extends RequestMap>>() {
public Collection<? extends RequestMap> fun(final Controller strutsRoot) {
return strutsRoot.getAllRequestMaps();
}
};
private static final Function<Controller, Collection<? extends ViewMap>> VIEW_MAP_COLLECTOR =
new Function<Controller, Collection<? extends ViewMap>>() {
public Collection<? extends ViewMap> fun(final Controller strutsRoot) {
return strutsRoot.getAllViewMaps();
}
};
private static final Function<RequestMap, Collection<? extends Response>> RESPONSE_MAP_COLLECTOR =
new Function<RequestMap, Collection<? extends Response>>() {
public Collection<? extends Response> fun(final RequestMap strutsRoot) {
return strutsRoot.getResponse();
}
};
public ControllerModelImpl(DomFileElement<Controller> mergedModel, @NotNull Set<XmlFile> configFiles) {
super(mergedModel, configFiles);
}
@NotNull
public List<Controller> getMergedControllers() {
return ContainerUtil.map(getRoots(), ROOT_ELEMENT_MAPPER);
}
@NotNull
public List<RequestMap> getAllRequestMaps() {
return ContainerUtil.concat(getMergedControllers(), REQUSET_MAP_COLLECTOR);
}
@NotNull
public List<ViewMap> getAllViewMaps() {
return ContainerUtil.concat(getMergedControllers(), VIEW_MAP_COLLECTOR);
}
public List<Response> getAllResponses() {
return ContainerUtil.concat(getAllRequestMaps(), RESPONSE_MAP_COLLECTOR);
}
@NotNull
public List<ViewMap> findViewMapByName(@NotNull @NonNls final String viewName) {
return ContainerUtil.findAll(getAllViewMaps(), new Condition<ViewMap>() {
public boolean value(ViewMap viewMap) {
return viewMap.getName().getStringValue().equals(viewName);
}
});
}
public boolean isServiceClass(PsiClass psiClass) {
return false;
}
public boolean processViewMap(Processor<ViewMap> processor) {
for (final ViewMap view : getAllViewMaps()) {
if (!processor.process(view)) {
return false;
}
}
return true;
}
}