
com.activitystream.model.aspects.DimensionsAspect Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of as-sdk Show documentation
Show all versions of as-sdk Show documentation
AS-SDK is a java library to allow easy interoperability with Activity Stream.
package com.activitystream.model.aspects;
import com.activitystream.model.ASConstants;
import com.activitystream.model.interfaces.AnalyticsElement;
import com.activitystream.model.analytics.TimeSeriesEntry;
import com.activitystream.model.entities.EntityChangeMap;
import com.activitystream.model.entities.EntityReference;
import com.activitystream.model.interfaces.DynamicAspect;
import com.activitystream.model.validation.AdjustedPropertyWarning;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
public class DimensionsAspect extends AbstractMapAspect implements AnalyticsElement, DynamicAspect {
public static final AspectType ASPECT_TYPE =
new AspectType.Embedded(ASConstants.ASPECTS_DIMENSIONS, DimensionsAspect::new, AspectType.MergeStrategy.MERGE) {
};
protected static final Logger logger = LoggerFactory.getLogger(DimensionsAspect.class);
public DimensionsAspect() {
}
@Override
public void loadFromValue(Object value) {
if (value instanceof String) {
put("user_agent", value);
} else if (value instanceof Map) {
super.loadFromValue(value);
}
}
/************
* Utility functions
************/
@Override
public void visited(Collection visited) {
super.put("_visited", visited);
}
@Override
public AspectType getAspectType() {
return ASPECT_TYPE;
}
/************ Analytical functions ************/
@Override
public void populateTimeSeriesEntry(TimeSeriesEntry entry, String context, long depth) {
}
@Override
public void addTimeSeriesDimensions(TimeSeriesEntry series) {
Map dimensionMap = new LinkedHashMap<>();
addToMap(dimensionMap);
if (!dimensionMap.isEmpty()) series.put("dimensions", dimensionMap); //Converting dimension values to strings for ingestion
}
public void addToMap(Map super String, ? super String> map) {
for (Map.Entry entry : (Set) entrySet()) {
String key = (String) entry.getKey();
if (!key.startsWith("_"))
map.putIfAbsent(key, (String) entry.getValue());
}
}
/************ Assignment & Validation ************/
@Override
public Object put(Object key, Object value) {
String theKey = key.toString();
theKey = theKey.replaceAll("\\.", "_");
String theLCKey = theKey.toLowerCase();
if (!theKey.equals(theLCKey)) {
this.addProblem(new AdjustedPropertyWarning("The property name: '" + theKey + "' was converted to lower case"));
theKey = theLCKey;
}
if (theKey.startsWith("_")) {
if (value == null)
return null;
return super.put(theKey, value);
}
if (value instanceof List) {
List categoryList = (List) value;
if (key.equals(ASConstants.FIELD_CATEGORY) && categoryList.size() == 3) {
put(ASConstants.FIELD_TYPE, categoryList.get(0));
put(ASConstants.FIELD_CATEGORY, categoryList.get(1));
put(ASConstants.FIELD_SUB_CATEGORY, categoryList.get(2));
return null;
} else if (key.equals(ASConstants.FIELD_CATEGORY) && categoryList.size() == 2) {
put(ASConstants.FIELD_TYPE, "To Do");
put(ASConstants.FIELD_CATEGORY, categoryList.get(0));
put(ASConstants.FIELD_SUB_CATEGORY, categoryList.get(1));
return null;
} else if (key.equals(ASConstants.FIELD_CATEGORIES)) {
//Allow for magic key
} else {
addProblem(new AdjustedPropertyWarning("List values are not preferred as Dimension values"));
logger.warn("List value in dimensions: " + key + " = " + value);
return null;
}
} else if (value instanceof Map) {
//addException(new InvalidPropertyContentError("Map values are not supported as Dimension values"));
//logger.warn("Map value in dimensions: " + key + " = " + value);
this.putAll((Map) value);
return null;
}
if (value == null || value.toString().isEmpty()) return null; //prune away empty values
return super.put(theKey, value.toString());
}
@Override
public void verify() {
}
/************ Persistence ************/
@Override
protected void handleChanges(Map oldValues, Map newValues) {
registerChanges(oldValues, newValues, EntityChangeMap.ACTION.IGNORE, EntityChangeMap.ACTION.PROCESS);
}
@Override
public String getDocumentClassName() {
return ASConstants.EM_DIMENSIONS;
}
@Override
public Collection getFieldNames() {
return keySet();
}
@Override
public Object getValueType() {
return "STRING";
//return OType.STRING;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy