use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.
the class DesktopOptionsGroup method setOptionsMap.
@Override
public void setOptionsMap(Map<String, ?> map) {
if (optionsInitialized)
return;
super.setOptionsMap(map);
if (optionsMap != null) {
for (String key : optionsMap.keySet()) {
addItem(new MapKeyWrapper(key));
}
if ((datasource != null) && (datasource.getState() == Datasource.State.VALID)) {
Entity newValue = datasource.getItem();
updateComponent(newValue);
fireChangeListeners(newValue);
}
optionsInitialized = true;
}
}
use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.
the class DesktopOptionsGroup method setOptionsEnum.
@Override
public void setOptionsEnum(Class<? extends EnumClass> optionsEnum) {
if (optionsInitialized)
return;
super.setOptionsEnum(optionsEnum);
if (optionsEnum != null) {
List options = Arrays.asList(optionsEnum.getEnumConstants());
for (Object obj : options) {
addItem(new ObjectWrapper(obj));
}
if ((datasource != null) && (datasource.getState() == Datasource.State.VALID)) {
Entity newValue = datasource.getItem();
updateComponent(newValue);
fireChangeListeners(newValue);
}
optionsInitialized = true;
}
}
use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.
the class PersistenceSecurityImpl method calculateFilteredData.
@SuppressWarnings("unchecked")
protected boolean calculateFilteredData(Entity entity, Set<EntityId> handled, boolean checkPermitted) {
MetaClass metaClass = entity.getMetaClass();
if (!isPermittedInMemory(entity) && checkPermitted) {
return true;
}
EntityId entityId = new EntityId(referenceToEntitySupport.getReferenceId(entity), metaClass.getName());
if (handled.contains(entityId)) {
return false;
}
handled.add(entityId);
if (entity instanceof BaseGenericIdEntity) {
BaseGenericIdEntity baseGenericIdEntity = (BaseGenericIdEntity) entity;
for (MetaProperty property : metaClass.getProperties()) {
if (metadataTools.isPersistent(property) && PersistenceHelper.isLoaded(entity, property.getName())) {
Object value = entity.getValue(property.getName());
if (value instanceof Collection) {
Set filtered = new LinkedHashSet();
for (Entity item : (Collection<Entity>) value) {
if (calculateFilteredData(item, handled, true)) {
filtered.add(referenceToEntitySupport.getReferenceId(item));
}
}
if (!filtered.isEmpty()) {
securityTokenManager.addFiltered(baseGenericIdEntity, property.getName(), filtered);
}
} else if (value instanceof Entity) {
Entity valueEntity = (Entity) value;
if (calculateFilteredData(valueEntity, handled, true)) {
securityTokenManager.addFiltered(baseGenericIdEntity, property.getName(), referenceToEntitySupport.getReferenceId(valueEntity));
}
}
}
}
securityTokenManager.writeSecurityToken(baseGenericIdEntity);
}
return false;
}
use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.
the class PersistenceSecurityImpl method restoreFilteredData.
@Override
@SuppressWarnings("unchecked")
public void restoreFilteredData(Entity entity) {
MetaClass metaClass = metadata.getClassNN(entity.getClass());
String storeName = metadataTools.getStoreName(metaClass);
EntityManager entityManager = persistence.getEntityManager(storeName);
Multimap<String, Object> filtered = BaseEntityInternalAccess.getFilteredData(entity);
if (filtered == null) {
return;
}
for (Map.Entry<String, Collection<Object>> entry : filtered.asMap().entrySet()) {
MetaProperty property = metaClass.getPropertyNN(entry.getKey());
Collection filteredIds = entry.getValue();
if (property.getRange().isClass() && CollectionUtils.isNotEmpty(filteredIds)) {
Class entityClass = property.getRange().asClass().getJavaClass();
Class propertyClass = property.getJavaType();
if (Collection.class.isAssignableFrom(propertyClass)) {
Collection currentCollection = entity.getValue(property.getName());
if (currentCollection == null) {
throw new RowLevelSecurityException(format("Could not restore an object to currentValue because it is null [%s]. Entity [%s].", property.getName(), metaClass.getName()), metaClass.getName());
}
for (Object entityId : filteredIds) {
Entity reference = entityManager.getReference((Class<Entity>) entityClass, entityId);
// we ignore situations when the currentValue is immutable
currentCollection.add(reference);
}
} else if (Entity.class.isAssignableFrom(propertyClass)) {
Object entityId = filteredIds.iterator().next();
Entity reference = entityManager.getReference((Class<Entity>) entityClass, entityId);
// we ignore the situation when the field is read-only
entity.setValue(property.getName(), reference);
}
}
}
}
use of com.haulmont.cuba.core.entity.Entity in project cuba by cuba-platform.
the class QueryImpl method getQuery.
protected JpaQuery<T> getQuery() {
if (query == null) {
View view = views.isEmpty() ? null : views.get(0);
if (isNative) {
log.trace("Creating SQL query: {}", queryString);
if (resultClass == null)
query = (JpaQuery) emDelegate.createNativeQuery(queryString);
else {
if (!Entity.class.isAssignableFrom(resultClass)) {
throw new IllegalArgumentException("Non-entity result class for native query is not supported" + " by EclipseLink: " + resultClass);
}
Class effectiveClass = metadata.getExtendedEntities().getEffectiveClass(resultClass);
query = (JpaQuery) emDelegate.createNativeQuery(queryString, effectiveClass);
}
} else {
log.trace("Creating JPQL query: {}", queryString);
transformedQueryString = transformQueryString();
log.trace("Transformed JPQL query: {}", transformedQueryString);
Class effectiveClass = getEffectiveResultClass();
if (effectiveClass != null) {
query = (JpaQuery) emDelegate.createQuery(transformedQueryString, effectiveClass);
} else {
query = (JpaQuery) emDelegate.createQuery(transformedQueryString);
}
if (view != null) {
MetaClass metaClass = metadata.getClassNN(view.getEntityClass());
if (!metadata.getTools().isCacheable(metaClass) || !singleResultExpected) {
query.setHint(QueryHints.REFRESH, HintValues.TRUE);
query.setHint(QueryHints.REFRESH_CASCADE, CascadePolicy.CascadeByMapping);
}
}
}
if (flushMode == null) {
if (view != null && !view.loadPartialEntities()) {
query.setFlushMode(FlushModeType.AUTO);
} else {
query.setFlushMode(FlushModeType.COMMIT);
}
} else {
query.setFlushMode(flushMode);
}
boolean nullParam = false;
for (Param param : params) {
param.apply(query);
if (param.value == null)
nullParam = true;
}
addMacroParams(query);
// disable SQL caching to support "is null" generation
if (nullParam)
query.setHint(QueryHints.PREPARE, HintValues.FALSE);
// nested collections in some cases
if (maxResults != null && !singleResultExpected)
query.setMaxResults(maxResults);
if (firstResult != null && !singleResultExpected)
query.setFirstResult(firstResult);
if (lockMode != null)
query.setLockMode(lockMode);
for (int i = 0; i < views.size(); i++) {
if (i == 0)
fetchGroupMgr.setView(query, queryString, views.get(i), singleResultExpected);
else
fetchGroupMgr.addView(query, queryString, views.get(i), singleResultExpected);
}
}
// noinspection unchecked
return query;
}
Aggregations