Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions modules/activity-analysis/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
<module>service-dependency</module>
<module>service-dependency-svg</module>
<module>situation-manager</module>
<module>situation-store</module>
<module>situation-store-jpa</module>
<module>situation-store-mem</module>
</modules>

</project>
Expand Down
40 changes: 35 additions & 5 deletions modules/activity-analysis/situation-store-jpa/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.overlord.rtgov.activity-analysis</groupId>
<artifactId>situation-store-jpa</artifactId>
<packaging>bundle</packaging>
<name>Overlord RTGov::Modules::Activity Analysis::SituationStoreJPA</name>

<parent>
Expand All @@ -12,10 +13,6 @@
</parent>

<dependencies>
<dependency>
<groupId>org.overlord.rtgov.ui</groupId>
<artifactId>rtgov-ui-situations</artifactId>
</dependency>

<!-- RTGov dependencies -->
<dependency>
Expand All @@ -36,6 +33,11 @@
<artifactId>analytics</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.overlord.rtgov.activity-analysis</groupId>
<artifactId>situation-store</artifactId>
<scope>provided</scope>
</dependency>

<!-- Third Party libs -->
<dependency>
Expand Down Expand Up @@ -70,7 +72,12 @@
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<scope>provided</scope>
</dependency>

<!-- Test only dependencies -->
<dependency>
<groupId>org.overlord.rtgov.activity-management</groupId>
Expand All @@ -90,4 +97,27 @@
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Export-Package>
org.overlord.rtgov.analytics.situation.store.jpa.*;version=${project.version}
</Export-Package>
<Import-Package>
org.overlord.rtgov.analytics.situation,
*
</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,9 @@
package org.overlord.rtgov.analytics.situation.store.jpa;

import static com.google.common.base.Strings.isNullOrEmpty;
import static java.lang.System.currentTimeMillis;

import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

Expand All @@ -31,11 +29,10 @@
import org.overlord.rtgov.analytics.situation.Situation;
import org.overlord.rtgov.analytics.situation.store.SituationStore;
import org.overlord.rtgov.analytics.situation.store.SituationsQuery;
import org.overlord.rtgov.jpa.JpaStore;
import org.overlord.rtgov.jpa.JpaStore.JpaWork;
import org.overlord.rtgov.ui.client.model.ResolutionState;
import org.overlord.rtgov.ui.provider.situations.Messages;
import org.overlord.rtgov.ui.server.interceptors.IUserContext;
import org.overlord.rtgov.analytics.situation.store.AbstractSituationStore;
import org.overlord.rtgov.analytics.situation.store.ResolutionState;
import org.overlord.rtgov.common.jpa.JpaStore;
import org.overlord.rtgov.common.jpa.JpaStore.JpaWork;

import com.google.common.base.Strings;

Expand All @@ -45,12 +42,10 @@
*
*/
@Singleton
public class JPASituationStore implements SituationStore {
public class JPASituationStore extends AbstractSituationStore implements SituationStore {

private static final int PROPERTY_VALUE_MAX_LENGTH = 250;

private static volatile Messages i18n = new Messages();

private static final Logger LOG = Logger.getLogger(JPASituationStore.class.getName());

private static final String JNDI_PROPERTY = "JPASituationStore.jndi.datasource";
Expand Down Expand Up @@ -79,23 +74,27 @@ public JPASituationStore(JpaStore jpaStore) {
*/
public Situation getSituation(final String id) {
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.GetSit", id)); //$NON-NLS-1$
LOG.finest("Get situation: "+id); //$NON-NLS-1$
}

Situation ret = _jpaStore.withJpa(new JpaWork<Situation>() {
public Situation perform(Session s) {
return (Situation) s.createQuery("SELECT sit FROM Situation sit " //$NON-NLS-1$
+ "WHERE sit.id = '" + id + "'") //$NON-NLS-1$ //$NON-NLS-2$
.uniqueResult();
return loadSituation(s, id);
}
});

if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.Result", ret)); //$NON-NLS-1$
LOG.finest("Situation="+ret); //$NON-NLS-1$
}

return (ret);
}

protected Situation loadSituation(final Session s, final String id) {
return (Situation) s.createQuery("SELECT sit FROM Situation sit " //$NON-NLS-1$
+ "WHERE sit.id = '" + id + "'") //$NON-NLS-1$ //$NON-NLS-2$
.uniqueResult();
}

/**
* {@inheritDoc}
Expand All @@ -110,7 +109,7 @@ public List<Situation> perform(Session s) {
}
});
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.SitResult", situations)); //$NON-NLS-1$
LOG.finest("Situations="+situations); //$NON-NLS-1$
}
return (situations);
}
Expand Down Expand Up @@ -193,13 +192,9 @@ private String createQuery(String selectOrDelete, SituationsQuery sitQuery) {
* {@inheritDoc}
*/
public void assignSituation(final String situationId, final String userName) {
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.AssSit", situationId)); //$NON-NLS-1$
}
_jpaStore.withJpa(new JpaWork<Void>() {
public Void perform(Session s) {
Situation situation = (Situation) s.get(Situation.class, situationId);
situation.getSituationProperties().put(ASSIGNED_TO_PROPERTY, userName);
doAssignSituation(loadSituation(s, situationId), userName);
return null;
}
});
Expand All @@ -209,20 +204,9 @@ public Void perform(Session s) {
* {@inheritDoc}
*/
public void closeSituation(final String situationId) {
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.DeassSit", situationId)); //$NON-NLS-1$
}
_jpaStore.withJpa(new JpaWork<Void>() {
public Void perform(Session s) {
Situation situation = (Situation) s.get(Situation.class, situationId);
java.util.Map<String, String> properties = situation.getSituationProperties();
properties.remove(ASSIGNED_TO_PROPERTY);
// remove current state if not already resolved
String resolutionState = properties.get(RESOLUTION_STATE_PROPERTY);
if (resolutionState != null
&& ResolutionState.RESOLVED != ResolutionState.valueOf(resolutionState)) {
properties.remove(RESOLUTION_STATE_PROPERTY);
}
doCloseSituation(loadSituation(s, situationId));
return null;
}
});
Expand All @@ -232,116 +216,50 @@ public Void perform(Session s) {
* {@inheritDoc}
*/
public void updateResolutionState(final String situationId, final ResolutionState resolutionState) {
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.UpdRState", situationId)); //$NON-NLS-1$
}
_jpaStore.withJpa(new JpaWork<Void>() {
public Void perform(Session s) {
Situation situation = (Situation) s.get(Situation.class, situationId);
situation.getSituationProperties().put(RESOLUTION_STATE_PROPERTY, resolutionState.name());
doUpdateResolutionState(loadSituation(s, situationId), resolutionState);
return null;
}
});
}

/**
* This class provides the situation results.
*
*/
public static class SituationsResult {

private java.util.List<Situation> _situations = null;
private int _totalCount = 0;

/**
* This is the constructor for the situation results.
*
* @param situations
* The situations relevant for the requested page
* @param total
* The total number
*/
public SituationsResult(java.util.List<Situation> situations, int total) {
_situations = situations;
_totalCount = total;
}

/**
* This method returns the list of situations for the selected page.
*
* @return The situations
*/
public java.util.List<Situation> getSituations() {
return (_situations);
}

/**
* This method returns the total number of situations available.
*
* @return The total number of situations
*/
public int getTotalCount() {
return (_totalCount);
}
}

@Override
public void recordSuccessfulResubmit(final String situationId) {
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.Resubmit", situationId)); //$NON-NLS-1$
}
public void recordSuccessfulResubmit(final String situationId, final String userName) {
_jpaStore.withJpa(new JpaWork<Void>() {
public Void perform(Session s) {
Situation situation = (Situation) s.get(Situation.class, situationId);
Map<String, String> properties = situation.getSituationProperties();
if (IUserContext.Holder.getUserPrincipal() != null) {
properties.put(RESUBMIT_BY_PROPERTY, IUserContext.Holder.getUserPrincipal().getName());
}
properties.put(RESUBMIT_AT_PROPERTY, Long.toString(currentTimeMillis()));
properties.put(RESUBMIT_RESULT_PROPERTY, RESUBMIT_RESULT_SUCCESS);
properties.remove(RESUBMIT_ERROR_MESSAGE);
doRecordSuccessfulResubmit(loadSituation(s, situationId), userName);
return null;
}
});
}

@Override
public void recordResubmitFailure(final String situationId, final String errorMessage) {
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest(i18n.format("JPASituationStore.ResubmitFailure", situationId)); //$NON-NLS-1$
}
public void recordResubmitFailure(final String situationId, final String errorMessage, final String userName) {
_jpaStore.withJpa(new JpaWork<Void>() {
public Void perform(Session s) {
Situation situation = (Situation) s.get(Situation.class, situationId);
Map<String, String> properties = situation.getSituationProperties();
if (IUserContext.Holder.getUserPrincipal() != null) {
properties.put(RESUBMIT_BY_PROPERTY, IUserContext.Holder.getUserPrincipal().getName());
}
properties.put(RESUBMIT_AT_PROPERTY, Long.toString(currentTimeMillis()));
properties.put(RESUBMIT_RESULT_PROPERTY, RESUBMIT_RESULT_ERROR);
String message = Strings.nullToEmpty(errorMessage);
if (message.length() > PROPERTY_VALUE_MAX_LENGTH) {
message = message.substring(0, PROPERTY_VALUE_MAX_LENGTH);
}
properties.put(RESUBMIT_ERROR_MESSAGE, message);
doRecordResubmitFailure(loadSituation(s, situationId), message, userName);
return null;
}
});
}

@Override
public int delete(final SituationsQuery situationQuery) {
final String queryString = createQuery("SELECT sit from Situation sit ", situationQuery);
return _jpaStore.withJpa(new JpaWork<Integer>() {
public Integer perform(Session s) {
Query query = s.createQuery(queryString);
@SuppressWarnings("unchecked")
List<Situation> situations = query.list();
for (Situation situation : situations) {
s.delete(situation);
}
return situations.size();
/**
* This method deletes the supplied situation.
*
* @param situation The situation
*/
protected void doDelete(final Situation situation) {
_jpaStore.withJpa(new JpaWork<Void>() {
public Void perform(Session s) {
s.delete(situation);
return null;
}
});
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<service interface="org.overlord.rtgov.analytics.situation.store.SituationStore">
<bean class="org.overlord.rtgov.analytics.situation.store.jpa.JPASituationStore" >
</bean>
</service>

</blueprint>

This file was deleted.

Loading