use of com.manydesigns.portofino.resourceactions.crud.configuration.database.SelectionProviderReference in project Portofino by ManyDesigns.
the class CrudAction method saveConfiguration.
@Override
protected boolean saveConfiguration(Object configuration) {
CrudConfiguration crudConfiguration = (CrudConfiguration) configuration;
List<SelectionProviderReference> sps = new ArrayList<>(crudConfiguration.getSelectionProviders());
crudConfiguration.getSelectionProviders().clear();
crudConfiguration.persistence = persistence;
crudConfiguration.init();
sps.forEach(sp -> {
ForeignKey fk = DatabaseLogic.findForeignKeyByName(crudConfiguration.getActualTable(), sp.getSelectionProviderName());
if (fk != null) {
sp.setForeignKeyName(sp.getSelectionProviderName());
sp.setSelectionProviderName(null);
}
if (sp.getSelectionProviderName() != null || sp.getForeignKeyName() != null) {
crudConfiguration.getSelectionProviders().add(sp);
}
});
List<CrudProperty> existingProperties = this.crudConfiguration.getProperties();
List<CrudProperty> configuredProperties = crudConfiguration.getProperties();
List<CrudProperty> newProperties = configuredProperties.stream().map(p1 -> {
Optional<CrudProperty> maybeP2 = existingProperties.stream().filter(p2 -> p1.getName().equals(p2.getName())).findFirst();
CrudProperty p2 = maybeP2.orElse(new CrudProperty());
p2.setName(p1.getName());
p2.setEnabled(p1.isEnabled());
p2.setInsertable(p1.isInsertable());
p2.setInSummary(p1.isInSummary());
p2.setLabel(p1.getLabel());
p2.setSearchable(p1.isSearchable());
p2.setUpdatable(p1.isUpdatable());
return p2;
}).collect(Collectors.toList());
crudConfiguration.setProperties(newProperties);
return super.saveConfiguration(crudConfiguration);
}
use of com.manydesigns.portofino.resourceactions.crud.configuration.database.SelectionProviderReference in project Portofino by ManyDesigns.
the class ModelSelectionProviderSupport method setupSelectionProvider.
protected boolean setupSelectionProvider(@Nullable SelectionProviderReference ref, DatabaseSelectionProvider current, Set<String> configuredSPs) {
List<Reference> references = current.getReferences();
String[] fieldNames = new String[references.size()];
Class[] fieldTypes = new Class[references.size()];
int i = 0;
for (Reference reference : references) {
Column column = reference.getActualFromColumn();
fieldNames[i] = column.getActualPropertyName();
fieldTypes[i] = column.getActualJavaType();
i++;
}
availableSelectionProviders.put(Arrays.asList(fieldNames), current);
for (String fieldName : fieldNames) {
// If another SP is configured for the same field, stop
if (configuredSPs.contains(fieldName)) {
return false;
}
}
if (ref == null || ref.isEnabled()) {
DisplayMode dm = ref != null ? ref.getDisplayMode() : DisplayMode.DROPDOWN;
SearchDisplayMode sdm = ref != null ? ref.getSearchDisplayMode() : SearchDisplayMode.DROPDOWN;
String newHref = ref != null ? ref.getCreateNewValueHref() : null;
String newText = ref != null ? ref.getCreateNewValueText() : null;
SelectionProvider selectionProvider = createSelectionProvider(current, fieldNames, fieldTypes, dm, sdm, newHref, newText);
CrudSelectionProvider crudSelectionProvider = new CrudSelectionProvider(selectionProvider, fieldNames, !(current instanceof ForeignKey));
crudSelectionProviders.add(crudSelectionProvider);
Collections.addAll(configuredSPs, fieldNames);
return true;
} else {
// To avoid automatically adding a FK later
CrudSelectionProvider crudSelectionProvider = new CrudSelectionProvider(null, fieldNames, false);
crudSelectionProviders.add(crudSelectionProvider);
return false;
}
}
use of com.manydesigns.portofino.resourceactions.crud.configuration.database.SelectionProviderReference in project Portofino by ManyDesigns.
the class ModelSelectionProviderSupport method makeSelectionProviderReference.
protected SelectionProviderReference makeSelectionProviderReference(ModelSelectionProvider dsp) {
SelectionProviderReference sel = new SelectionProviderReference();
if (dsp instanceof ForeignKey) {
sel.setForeignKeyName(dsp.getName());
} else {
sel.setSelectionProviderName(dsp.getName());
}
crudAction.getCrudConfiguration().getSelectionProviders().add(sel);
return sel;
}
use of com.manydesigns.portofino.resourceactions.crud.configuration.database.SelectionProviderReference in project Portofino by ManyDesigns.
the class ModelSelectionProviderSupport method setup.
public void setup() {
crudSelectionProviders = new ArrayList<>();
Set<String> configuredSPs = new HashSet<>();
for (SelectionProviderReference ref : crudAction.getCrudConfiguration().getSelectionProviders()) {
boolean added;
if (ref.getForeignKey() != null) {
added = setupSelectionProvider(ref, ref.getForeignKey(), configuredSPs);
} else if (ref.getSelectionProvider() instanceof DatabaseSelectionProvider) {
DatabaseSelectionProvider dsp = (DatabaseSelectionProvider) ref.getSelectionProvider();
added = setupSelectionProvider(ref, dsp, configuredSPs);
} else {
logger.error("Unsupported selection provider: " + ref.getSelectionProvider());
continue;
}
if (ref.isEnabled() && !added) {
logger.warn("Selection provider {} not added; check whether the fields on which it is configured " + "overlap with some other selection provider", ref);
}
}
// Remove disabled selection providers and mark them as configured to avoid re-adding them
Iterator<CrudSelectionProvider> it = crudSelectionProviders.iterator();
while (it.hasNext()) {
CrudSelectionProvider sp = it.next();
if (sp.getSelectionProvider() == null) {
it.remove();
Collections.addAll(configuredSPs, sp.getFieldNames());
}
}
Table table = crudAction.getCrudConfiguration().getActualTable();
if (table != null) {
for (ForeignKey fk : table.getForeignKeys()) {
setupSelectionProvider(null, fk, configuredSPs);
}
for (ModelSelectionProvider dsp : table.getSelectionProviders()) {
if (dsp instanceof DatabaseSelectionProvider) {
setupSelectionProvider(null, (DatabaseSelectionProvider) dsp, configuredSPs);
} else {
logger.error("Unsupported selection provider: " + dsp);
}
}
}
}
use of com.manydesigns.portofino.resourceactions.crud.configuration.database.SelectionProviderReference in project Portofino by ManyDesigns.
the class ModelSelectionProviderSupport method disableSelectionProvider.
public void disableSelectionProvider(List<String> key) {
// TODO this is a shortcut: takes the first available selection provider and disables it
Collection<ModelSelectionProvider> selectionProviders = availableSelectionProviders.get(key);
ModelSelectionProvider dsp = selectionProviders.iterator().next();
SelectionProviderReference sel = makeSelectionProviderReference(dsp);
sel.setEnabled(false);
}
Aggregations