public BinningFormModel() {
parameterMap = new HashMap<>();
propertySet = ParameterDescriptorFactory.createMapBackedOperatorPropertyContainer("Binning", parameterMap);
hideProperties();
String[] readerFormats = ProductIOPlugInManager.getInstance().getAllProductReaderFormatStrings();
Arrays.sort(readerFormats);
PropertyDescriptor descriptor = propertySet.getDescriptor(PROPERTY_KEY_SOURCE_PRODUCT_FORMAT);
descriptor.setValueSet(new ValueSet(readerFormats));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_GLOBAL, Boolean.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_COMPUTE_REGION, Boolean.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_MANUAL_WKT, Boolean.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_WKT, String.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_BOUNDS, Boolean.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_EAST_BOUND, Double.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_NORTH_BOUND, Double.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_WEST_BOUND, Double.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_SOUTH_BOUND, Double.class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_SOURCE_PRODUCTS, Product[].class));
propertySet.addProperty(createTransientProperty(PROPERTY_KEY_CONTEXT_SOURCE_PRODUCT, Product.class));
propertySet.setDefaultValues();
propertySet.getProperty(PROPERTY_KEY_REGION).addPropertyChangeListener(evt -> {
Geometry newGeometry = (Geometry) evt.getNewValue();
propertySet.setValue(PROPERTY_KEY_MANUAL_WKT, true);
propertySet.setValue(PROPERTY_KEY_WKT, newGeometry.toText());
});
}