/** * Query children properties. * * @param fp */ private void readProperties(Feature fp) { List<Property<?>> listOfProps = getJdbcTemplate().query( getQueryBuilder().getFeatureProperties(), PMAPPER, fp.getUid()); for (Property<?> ap : listOfProps) { fp.getCustomProperties().put(ap.getName(), ap); } }
/** * Check existence of the traget feature * * @param featureName * targte featurename * @return current object */ public final AssertFf4j assertThatFeatureDoesNotHaveProperties(String featureName) { assertThatFeatureExist(featureName); Map<String, Property<?>> properties = ff4j.getFeature(featureName).getCustomProperties(); Assert.assertTrue("Properties are required", (properties == null) || properties.isEmpty()); waitSomeSeconds(); return this; }
/** * Check existence of the traget feature * * @param featureName * targte featurename * @return current object */ public final AssertFf4j assertThatFeatureHasProperty(String featureName, String propertyName) { assertThatFeatureHasProperties(featureName); Map<String, Property<?>> properties = ff4j.getFeature(featureName).getCustomProperties(); Assert.assertTrue("Feature must contain property " + propertyName, properties.containsKey(propertyName)); waitSomeSeconds(); return this; }
/** * Check existence of the traget feature * * @param featureName * targte featurename * @return current object */ public final AssertFf4j assertThatFeatureHasProperties(String featureName) { assertThatFeatureExist(featureName); Map<String, Property<?>> properties = ff4j.getFeature(featureName).getCustomProperties(); Assert.assertTrue("Properties are required", (properties != null) && (properties.size() > 0)); waitSomeSeconds(); return this; }
/** * Check existence of the traget feature * * @param featureName * targte featurename * @return current object */ public final AssertFf4j assertThatFeatureHasNotProperty(String featureName, String propertyName) { assertThatFeatureExist(featureName); Map<String, Property<?>> properties = ff4j.getFeature(featureName).getCustomProperties(); Assert.assertTrue("Feature must contain property " + propertyName, (properties == null) || !properties.containsKey(propertyName)); waitSomeSeconds(); return this; }
/** {@inheritDoc} */ @Override public void create(Feature fp) { assertFeatureNotNull(fp); assertFeatureNotExist(fp.getUid()); // Convert map<String, Property> to map<String, String>, structure in DB Map < String, String > mapOfProperties = new HashMap<String, String>(); if (fp.getCustomProperties() != null && !fp.getCustomProperties().isEmpty()) { for (Map.Entry<String, Property<?>> customP : fp.getCustomProperties().entrySet()) { if (customP.getValue() != null) { mapOfProperties.put(customP.getKey(), customP.getValue().toJson()); } } } conn.getSession().execute(getBuilder().cqlCreateFeature(), fp.getUid(), fp.isEnable() ? 1 : 0, fp.getDescription(), JsonUtils.flippingStrategyAsJson(fp.getFlippingStrategy()), fp.getGroup(), fp.getPermissions(), mapOfProperties); }
public FeatureApiBean(Feature f) { this.uid = f.getUid(); this.enable = f.isEnable(); this.description = f.getDescription(); this.group = f.getGroup(); this.permissions = new ArrayList<String>(f.getPermissions()); if (f.getFlippingStrategy() != null) { this.flippingStrategy = new FlippingStrategyApiBean(f.getFlippingStrategy()); } if (f.getCustomProperties() != null) { for (Property<?> ap1 : f.getCustomProperties().values()) { customProperties.put(ap1.getName(), new PropertyApiBean(ap1)); } } }
/** * Remove all existing permissions and create new. * * @param fp */ private void createProperties(Feature fp) { if (fp.getCustomProperties() != null) { getJdbcTemplate().update(getQueryBuilder().deleteAllFeatureCustomProperties(), fp.getUid()); for (String propertyName : fp.getCustomProperties().keySet()) { Property<?> ap = fp.getCustomProperties().get(propertyName); String fixedValues = null; if (ap.getFixedValues() != null && ap.getFixedValues().size() > 0) { fixedValues = ap.getFixedValues().toString(); fixedValues = fixedValues.substring(1, fixedValues.length() - 1); } getJdbcTemplate().update(getQueryBuilder().createFeatureProperty(), ap.getName(), ap.getType(), ap.asString(), ap.getDescription(), fixedValues, fp.getUid()); } } }
/** * Copy constructor. * * @param f * * target feature */ public FeatureApiBean(Feature f) { this.uid = f.getUid(); this.enable = f.isEnable(); this.description = f.getDescription(); this.group = f.getGroup(); this.permissions = new ArrayList<String>(f.getPermissions()); if (f.getFlippingStrategy() != null) { this.flippingStrategy = new FlippingStrategyApiBean(f.getFlippingStrategy()); } if (f.getCustomProperties() != null) { for (Property<?> ap1 : f.getCustomProperties().values()) { customProperties.put(ap1.getName(), new PropertyApiBean(ap1)); } } }
/** * TDD. */ @Test public void testUpdateRemoveProperty() { // Given assertFf4j.assertThatFeatureExist(F1); // assertFf4j.assertThatFeatureHasProperty(F1, "ppint"); // When Feature myFeature = ff4j.getFeatureStore().read(F1); myFeature.getCustomProperties().remove("ppint"); testedStore.update(myFeature); // Then assertFf4j.assertThatFeatureHasNotProperty(F1, "p1"); }
/** * TDD. */ @Test public void testUpdateEditPropertyValue() { // Given assertFf4j.assertThatFeatureExist(F1); Feature myFeature = ff4j.getFeatureStore().read(F1); if (myFeature.getCustomProperties().isEmpty()) { PropertyString p1 = new PropertyString(PPSTRING); p1.setValue("hello"); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); } assertFf4j.assertThatFeatureHasProperty(F1, PPSTRING); Assert.assertEquals("hello", ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(PPSTRING)// .asString()); // When myFeature = ff4j.getFeatureStore().read(F1); PropertyString p1 = new PropertyString(PPSTRING, "goodbye"); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then Assert.assertEquals("goodbye", ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(PPSTRING)// .asString()); }
case FF4J_FEATURE_PROPERTY: Property<?> ap = fromNode2Property(nodeOther); targetFeature.getCustomProperties().put(ap.getName(), ap); break;
/** {@inheritDoc} */ @Override public void update(Feature fp) { Util.assertNotNull(fp); Util.assertHasLength(fp.getUid()); // Check existence read(fp.getUid()); // Create or update core Feature as a first TX Transaction tx = graphDb.beginTx(); graphDb.execute(createUpdateCoreFeature(fp)); tx.success(); // Create, update or delete Flipping Strategy updateFlippingStrategy(fp); // Update groups updateGroups(fp); // Properties Transaction tx3 = graphDb.beginTx(); Map<String, Object> paramUID = new HashMap<>(); paramUID.put("uid", fp.getUid()); graphDb.execute(QUERY_CYPHER_DELETE_PROPERTIES_FEATURE, paramUID); tx3.success(); if (fp.getCustomProperties() != null && fp.getCustomProperties().size() > 0) { for (String pName : fp.getCustomProperties().keySet()) { createProperty(fp.getProperty(pName), fp.getUid()); } } }
/** {@inheritDoc} */ @Override public void create(Feature fp) { if (fp == null) { throw new IllegalArgumentException("Feature cannot be null nor empty"); } if (exist(fp.getUid())) { throw new FeatureAlreadyExistException(fp.getUid()); } Transaction tx = graphDb.beginTx(); // Create core graphDb.execute(createQueryNewCoreFeature(fp)); // Create Flipping Strategy if (fp.getFlippingStrategy() != null) { graphDb.execute(createQueryFlippingStrategy(fp)); } // Create Group if (fp.getGroup() != null && !"".equals(fp.getGroup())) { addToGroup(fp.getUid(), fp.getGroup()); } tx.success(); // Create Properties if (fp.getCustomProperties() != null && fp.getCustomProperties().size() > 0) { for (String pName : fp.getCustomProperties().keySet()) { createProperty(fp.getProperty(pName), fp.getUid()); } } }
/** * TDD. */ @Test @SuppressWarnings("unchecked") public void testUpdateEditPropertyAddFixedValues() { // Given assertFf4j.assertThatFeatureExist(F1); Feature myFeature = ff4j.getFeatureStore().read(F1); myFeature.addProperty(new PropertyInt(DIGIT_VALUE, 2, Util.set(0, 1, 2, 3))); ff4j.getFeatureStore().update(myFeature); assertFf4j.assertThatFeatureHasProperty(F1, DIGIT_VALUE); Set<Integer> fixValues = (Set<Integer>) ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(DIGIT_VALUE).getFixedValues(); Assert.assertEquals(4, fixValues.size()); // When myFeature = ff4j.getFeatureStore().read(F1); PropertyInt p1 = new PropertyInt(DIGIT_VALUE); p1.setFixedValues(Util.set(0, 1, 2, 3, 4)); p1.setValue(4); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then Set<Integer> fixValues2 = (Set<Integer>) ff4j.getFeatureStore().read(F1) // .getCustomProperties().get(DIGIT_VALUE).getFixedValues(); Assert.assertEquals(5, fixValues2.size()); }
/** * TDD. */ @Test @SuppressWarnings("unchecked") public void testUpdateEditPropertyRemoveFixedValues() { // Given assertFf4j.assertThatFeatureExist(F1); Feature myFeature = ff4j.getFeatureStore().read(F1); myFeature.addProperty(new PropertyString(REGION_IDENTIFIER, "AMER", Util.set("AMER", "SSSS", "EAST"))); testedStore.update(myFeature); assertFf4j.assertThatFeatureHasProperty(F1, REGION_IDENTIFIER); Set<String> fixValues = (Set<String>) ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(REGION_IDENTIFIER).getFixedValues(); Assert.assertEquals(3, fixValues.size()); // When myFeature = ff4j.getFeatureStore().read(F1); PropertyString p1 = new PropertyString(REGION_IDENTIFIER); p1.setValue("AMER"); p1.setFixedValues(Util.set("AMER", "SSSS")); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then Set<Integer> fixValues2 = (Set<Integer>) ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(REGION_IDENTIFIER).getFixedValues(); Assert.assertEquals(2, fixValues2.size()); }
/** * TDD. */ @Test public void testUpdateAddProperty() { // Given assertFf4j.assertThatFeatureExist(F2); assertFf4j.assertThatFeatureHasNotProperty(F2, "p1"); // When Feature myFeature = ff4j.getFeatureStore().read(F2); PropertyString p1 = new PropertyString("p1", "v1", Util.set("v1", "v2")); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then assertFf4j.assertThatFeatureHasProperty(F2, "p1"); }
@Override public Document toStore(Feature feature) { String strategyColumn = null; String expressionColumn = null; if (feature.getFlippingStrategy() != null) { strategyColumn = feature.getFlippingStrategy().getClass().getName(); expressionColumn = MappingUtil.fromMap(feature.getFlippingStrategy().getInitParams()); } String customProperties = null; if (feature.getCustomProperties() != null) { customProperties = JsonUtils.customPropertiesAsJson(feature.getCustomProperties()); } return new FeatureDocumentBuilder().addFeatUid(feature.getUid()).// addEnable(feature.isEnable()).// addDescription(feature.getDescription()).// addGroupName(feature.getGroup()).// addStrategy(strategyColumn).// addExpression(expressionColumn).// addCustomProperties(customProperties). // addRoles(feature.getPermissions()).build(); }
/** * Convert {@link Feature} to {@link DBObject}. * * @param feature * target feature. * @return document in mongo db */ public DBObject toDBObject(Feature feature) { String strategyColumn = null; String expressionColumn = null; if (feature.getFlippingStrategy() != null) { strategyColumn = feature.getFlippingStrategy().getClass().getName(); expressionColumn = MappingUtil.fromMap(feature.getFlippingStrategy().getInitParams()); } String customProperties = null; if (feature.getCustomProperties() != null) { customProperties = JsonUtils.customPropertiesAsJson(feature.getCustomProperties()); } return new FeatureDBObjectBuilder().addFeatUid(feature.getUid()).// addEnable(feature.isEnable()).// addDescription(feature.getDescription()).// addGroupName(feature.getGroup()).// addStrategy(strategyColumn).// addExpression(expressionColumn).// addCustomProperties(customProperties). addRoles(feature.getPermissions()).build(); }
/** * Allow to update feature. * * @param featureId */ private void updateFeature(HttpServletRequest req, String featureId) { Feature old = ff4j.getFeatureStore().read(featureId); // Core Feature fp = new Feature(featureId, old.isEnable()); fp.setPermissions(old.getPermissions()); fp.setCustomProperties(old.getCustomProperties()); fp.setFlippingStrategy(buildFlippingStrategy(req, fp.getUid())); // Description final String featureDesc = req.getParameter(DESCRIPTION); if (Util.hasLength(featureDesc)) { fp.setDescription(featureDesc); } // GroupName final String groupName = req.getParameter(GROUPNAME); if (Util.hasLength(groupName)) { fp.setGroup(groupName); } // Creation ff4j.getFeatureStore().update(fp); }