Hi Michael,
kein Problem, oftmals liegt es ja wirklich an so Kleinigkeiten (wie ich bereits auch schon in anderen Threads gelesen habe), daher hier meine entsprechenden Klassen:
SomeDataSession:
package somepackage;
import de.espirit.firstspirit.access.BaseContext;
import de.espirit.firstspirit.access.store.Store;
import de.espirit.firstspirit.access.store.globalstore.GlobalStoreRoot;
import de.espirit.firstspirit.access.store.globalstore.ProjectProperties;
import de.espirit.firstspirit.agency.LanguageAgent;
import de.espirit.firstspirit.agency.SpecialistsBroker;
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.client.plugin.dataaccess.DataAccessSession;
import de.espirit.firstspirit.client.plugin.dataaccess.DataSnippetProvider;
import de.espirit.firstspirit.client.plugin.dataaccess.DataStreamBuilder;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.Identifying;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.SessionAspectMap;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.SessionAspectType;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.ValueIndexing;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.TransferHandling;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.TransferSupplying;
import somepackage.aspects.SomeDataIdentifyingDataAccessSessionAspect;
import somepackage.aspects.SomeDataTransferHandlingDataAccessSessionAspect;
import somepackage.aspects.SomeDataTransferSupplyingDataAccessSessionAspect;
import somepackage.aspects.SomeDataValueIndexingDataAccessSessionAspect;
import somepackage.providers.SomeDataObjectDataSnippetProvider;
import java.util.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
*
* @author Danny Althoff
*/
public class SomeDataSession implements DataAccessSession<SomeDataObject> {
private final BaseContext _context;
private final SessionAspectMap _aspects;
private final SomeDataObjectProvider _categoryDataObjectProvider;
public SomeDataSession(BaseContext _context) {
this._context = _context;
this._aspects = new SessionAspectMap();
this._someDataObjectProvider = new SomeDataObjectProvider(getServerPrefix(_context));
// Add session-specific aspects to the aspect map.
// Advertise that the individual SomeDataObject objects support identifying features.
_aspects.put(Identifying.TYPE, new SomeDataIdentifyingDataAccessSessionAspect(_someDataObjectProvider));
// Advertise support for value indexing, allowing entries referenced in an FS_INDEX input component to be indexed for search purposes.
_aspects.put(ValueIndexing.TYPE, new SomeDataValueIndexingDataAccessSessionAspect(_someDataObjectProvider));
// Advertise that this plug-in can supply transfer data for individual SomeDataObject entries.
_aspects.put(TransferSupplying.TYPE, new SomeDataTransferSupplyingDataAccessSessionAspect(_context));
// Advertise that this plug-in can handle transfer data from outside sources.
_aspects.put(TransferHandling.TYPE, new SomeDataTransferHandlingDataAccessSessionAspect(_context));
}
@Nullable
@Override
public <A> A getAspect(SessionAspectType<A> type) {
return _aspects.get(type);
}
// ... cropped ...
}
SomeDataTransferSupplyingDataAccessSessionAspect:
package somepackage.aspects;
import de.espirit.firstspirit.access.BaseContext;
import de.espirit.firstspirit.agency.TransferAgent;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.SupplierHost;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.TransferSupplying;
import de.espirit.firstspirit.ui.gadgets.aspects.transfer.TransferType;
import somepackage.SomeDataObject;
import java.util.Collections;
import java.util.List;
import org.jetbrains.annotations.NotNull;
/**
* @author Danny Althoff
*/
public class SomeDataTransferSupplyingDataAccessSessionAspect implements TransferSupplying<SomeDataObject> {
private final BaseContext _context;
public SomeDataTransferSupplyingDataAccessSessionAspect(@NotNull final BaseContext _context) {
this._context = _context;
}
@Override
public void registerSuppliers(SupplierHost<SomeDataObject> host) {
final TransferAgent transferAgent = _context.requireSpecialist(TransferAgent.TYPE);
final TransferType<SomeDataObject> someDataObjectTransferType = transferAgent.getRawValueType(SomeDataObject.class);
host.registerSupplier(someDataObjectTransferType, new SomeDataObjectSupplier());
final TransferType<String> stringTransferType = transferAgent.getStringType();
host.registerSupplier(stringTransferType, new StringSupplier());
// register on "allTextsType" for CC-support, would work on SA with normal stringType:
// https://community.e-spirit.com/message/30774#30774
final TransferType<String> allTextsTransferType = transferAgent.getAllTextsType();
host.registerSupplier(allTextsTransferType, new StringSupplier());
}
private static class SomeDataObjectSupplier implements SupplierHost.Supplier<SomeDataObject, SomeDataObject> {
@Override
public List<SomeDataObject> supply(@NotNull final SomeDataObject object) {
return Collections.singletonList(object);
}
}
private static class StringSupplier implements SupplierHost.Supplier<SomeDataObject, String> {
@Override
public List<String> supply(@NotNull final SomeDataObject object) {
return Collections.singletonList(object.getSpecialValue());
}
}
}
Funktioniert ja im SA, daher sollte es ja eigentlich im CC auch klappen. Ist etwas unschön, wenn beide nicht gleich funktionieren
ist das eventuell ein Bug im CC, oder ist das nur eine Kleinigkeit, die ich noch nicht sehe?