Issue #1708 Fix redundant excution of evaluateQuery.

Change-Id: Ic41ac2b455755a59c189fa5ec0ca63b45bfca80a

Former-commit-id: 274ce762d8 [formerly a5a273c1c2 [formerly 2528719c05a9c57ca56a6d6e56ed3ae853d5b860]]
Former-commit-id: a5a273c1c2
Former-commit-id: 2212f333a3
This commit is contained in:
Ron Anderson 2013-02-26 19:00:56 -06:00
parent 547f0d086f
commit db805e2097
4 changed files with 51 additions and 104 deletions

View file

@ -57,6 +57,7 @@ import com.raytheon.viz.gfe.rsc.GFEResource;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 14, 2012 mschenke Initial creation
* Feb 26, 2013 #1708 randerso Fixed double notification for time change
*
* </pre>
*
@ -162,6 +163,9 @@ public class GFETimeMatcher extends AbstractTimeMatcher {
FramesInfo currInfo = descriptor.getFramesInfo();
int currIdx = currInfo.getFrameIndex();
DataTime currTime = currInfo.getCurrentFrame();
if (selectedDate != null) {
currTime = new DataTime(selectedDate);
}
// Create descriptor times, for each resource, time match against them
DataTime[] descriptorTimes = calculateDescriptorTimes(descriptor,

View file

@ -26,20 +26,21 @@ import com.raytheon.uf.common.dataplugin.gfe.grid.Grid2DFloat;
import com.raytheon.uf.common.dataplugin.gfe.reference.GroupID;
import com.raytheon.uf.common.dataplugin.gfe.reference.ReferenceData;
import com.raytheon.uf.common.dataplugin.gfe.reference.ReferenceID;
import com.raytheon.uf.common.python.concurrent.IPythonJobListener;
import com.raytheon.viz.gfe.core.msgs.IEditAreaGroupInvChangedListener;
import com.raytheon.viz.gfe.core.msgs.IReferenceSetChangedListener;
import com.raytheon.viz.gfe.core.msgs.IReferenceSetIDChangedListener;
import com.raytheon.viz.gfe.core.msgs.IReferenceSetInvChangedListener;
/**
* TODO Add Description
* Public interface for ReferenceSetManager
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 2, 2008 randerso Initial creation
* 02/14/2013 #1506 mnash Move away from using QueryScript on the UI thread
* 02/26/2013 #1708 randerso Remove evaluateRefSet from public interface
*
* </pre>
*
@ -211,6 +212,7 @@ public interface IReferenceSetManager {
*/
public abstract Grid2DBit mySiteGridpoints();
@Override
public abstract String toString();
/**
@ -307,20 +309,6 @@ public interface IReferenceSetManager {
public void deleteGroup(String groupName);
/**
* Force the active ref set to be re-evaluated asynchronously.
*
* @param listener
*/
public void evaluateActiveRefSet(IPythonJobListener<ReferenceData> listener);
/**
* Force the active ref set to be re-evalutated
*
* @return the active refersence set
*/
public ReferenceData evaluateActiveRefSet();
/**
* Dispose of this instance
*/

View file

@ -37,8 +37,6 @@ import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import jep.JepException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.SWT;
@ -108,6 +106,7 @@ import com.vividsolutions.jts.geom.Envelope;
* Apr 1, 2008 #1053 randerso Initial creation
* 02/14/2013 #1506 mnash Move QueryScript to use new Python concurrency implementation
* 02/12/2013 #1597 randerso Improved error message for exceptions evaluating queries
* 02/26/2013 #1708 randerso Removed no longer needed near duplicate methods
*
* </pre>
*
@ -185,7 +184,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
private final ArrayList<String> historyStack;
private PythonJobCoordinator coordinator;
private PythonJobCoordinator<QueryScript> coordinator;
/**
* Set the wait cursor on or off
@ -1321,22 +1320,30 @@ public class ReferenceSetManager implements IReferenceSetManager,
* com.raytheon.viz.gfe.core.IReferenceSetManager.RefSetMode)
*/
@Override
public void incomingRefSet(ReferenceData refData, RefSetMode mode) {
public void incomingRefSet(ReferenceData refData, final RefSetMode mode) {
// Evaluate the Incoming refData if necessary
// Then, change the active Reference Set using the given mode.
ReferenceData ref = null;
if (refData.isQuery()) {
String query = refData.getQuery();
try {
ref = evaluateQuery(query);
ref.setQuery(query);
} catch (JepException e) {
return;
}
final String query = refData.getQuery();
IPythonJobListener<ReferenceData> listener = new IPythonJobListener<ReferenceData>() {
@Override
public void jobFailed(Throwable e) {
statusHandler.handle(Priority.PROBLEM,
"Unable to run QueryScript job", e);
}
@Override
public void jobFinished(ReferenceData result) {
result.setQuery(query);
setRefSet(result, mode);
}
};
evaluateQuery(query, listener);
} else {
ref = refData;
setRefSet(ref, mode);
}
setRefSet(ref, mode);
}
/**
@ -1714,24 +1721,10 @@ public class ReferenceSetManager implements IReferenceSetManager,
sendEditAreaGroupInvChanged();
}
private ReferenceData evaluateQuery(String query) throws JepException {
private void evaluateQuery(String query,
IPythonJobListener<ReferenceData> listener) {
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("expression", query);
IPythonExecutor<QueryScript, ReferenceData> executor = new QueryScriptExecutor(
"evaluate", argMap);
ReferenceData newRef = null;
try {
newRef = (ReferenceData) coordinator.submitSyncJob(executor);
} catch (Exception e) {
statusHandler.handle(Priority.ERROR,
"Unable to submit job to ExecutorService", e);
}
return newRef;
}
private void evaluateQuery(String query, IPythonJobListener<?> listener) {
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("expression", query);
IPythonExecutor<QueryScript, ReferenceData> executor = new QueryScriptExecutor(
@ -1753,7 +1746,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
argMap);
int result = 0;
try {
result = (Integer) coordinator.submitSyncJob(executor);
result = coordinator.submitSyncJob(executor);
} catch (Exception e) {
statusHandler.handle(Priority.ERROR,
"Unable to submit job to ExecutorService", e);
@ -1762,8 +1755,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
return result != 0;
}
@Override
public void evaluateActiveRefSet(IPythonJobListener<ReferenceData> listener) {
private void evaluateActiveRefSet(IPythonJobListener<ReferenceData> listener) {
ReferenceData active = getActiveRefSet();
if (active.isQuery()) {
// Re-evaluate the activeRefSet
@ -1775,27 +1767,6 @@ public class ReferenceSetManager implements IReferenceSetManager,
}
}
@Override
public ReferenceData evaluateActiveRefSet() {
// If activeRefSet is a query, re-evaluate it
ReferenceData active = getActiveRefSet();
if (active.isQuery()) {
// Re-evaluate the activeRefSet
try {
ReferenceData newRef = evaluateQuery(active.getQuery());
if (!newRef.getGrid().equals(active.getGrid())) {
setActiveRefSet(newRef);
}
} catch (JepException e) {
statusHandler.handle(Priority.PROBLEM,
"Error evaluating query \"" + active.getQuery()
+ "\" for " + active.getId().getName(), e);
}
}
return getActiveRefSet();
}
/*
* (non-Javadoc)
*

View file

@ -28,7 +28,6 @@ import com.raytheon.uf.common.dataplugin.gfe.reference.ReferenceData.CoordinateT
import com.raytheon.uf.common.geospatial.MapUtil;
import com.raytheon.uf.common.geospatial.ReferencedGeometry;
import com.raytheon.uf.common.geospatial.ReferencedObject.Type;
import com.raytheon.uf.common.python.concurrent.IPythonJobListener;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
@ -61,7 +60,8 @@ import com.vividsolutions.jts.geom.MultiPolygon;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 27, 2008 #1053 randerso Initial creation
* 2/14/2013 mnash Use the new Python concurrency for QueryScript
* 02/14/2013 #1506 mnash Use the new Python concurrency for QueryScript
* 02/26/2013 #1708 randerso Changed to not evaluate the ref set
*
* </pre>
*
@ -154,46 +154,30 @@ public class GFEReferenceSetResource extends
shadedShape = target.createShadedShape(false,
this.descriptor.getGridGeometry(), true);
JTSCompiler jtsCompiler = new JTSCompiler(shadedShape, outlineShape,
this.descriptor);
this.needsUpdate = false;
ReferenceData refData = this.refSetMgr.getActiveRefSet();
IPythonJobListener<ReferenceData> listener = new IPythonJobListener<ReferenceData>() {
@Override
public void jobFailed(Throwable e) {
statusHandler.handle(Priority.ERROR,
"Unable to run query script", e);
}
refData.setGrid(refData.getGrid());
@Override
public void jobFinished(ReferenceData refData) {
JTSCompiler jtsCompiler = new JTSCompiler(shadedShape,
outlineShape, descriptor);
refData.setGrid(refData.getGrid());
MultiPolygon mp = (MultiPolygon) refData.getPolygons(
CoordinateType.GRID).clone();
MultiPolygon mp = (MultiPolygon) refData.getPolygons(
CoordinateType.GRID).clone();
ReferencedGeometry rc = new ReferencedGeometry(mp,
MapUtil.getGridGeometry(refData.getGloc()), Type.GRID_CENTER);
ReferencedGeometry rc = new ReferencedGeometry(mp,
MapUtil.getGridGeometry(refData.getGloc()),
Type.GRID_CENTER);
try {
jtsCompiler.handle(rc, getCapability(ColorableCapability.class)
.getColor());
} catch (VizException e) {
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
}
try {
jtsCompiler
.handle(rc,
getCapability(ColorableCapability.class)
.getColor());
} catch (VizException e) {
statusHandler.handle(Priority.PROBLEM,
e.getLocalizedMessage(), e);
}
outlineShape.compile();
shadedShape.compile();
shadedShape.setFillPattern(fillPattern);
refSetMgr.getActiveRefSet();
issueRefresh();
}
};
this.refSetMgr.evaluateActiveRefSet(listener);
outlineShape.compile();
shadedShape.compile();
shadedShape.setFillPattern(fillPattern);
}
/*