/** * {@inheritDoc} */ @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append("<fields=\""); boolean needComma = false; for (String fieldName : getFieldNames()) { if (needComma) { sb.append(","); } sb.append(fieldName); } sb.append("\">"); return sb.toString(); } }
public void testConstructorNull() throws Exception { try { new PrimaryKey("key", null, null); fail("Expected NullPointerException"); } catch (NullPointerException e) { } }
getIntegrationWriter().getModel()); for (PrimaryKey pk :keysForSource) { for (String fieldName: pk.getFieldNames()) { ClassDescriptor cld = pk.getClassDescriptor(); FieldDescriptor fld = cld.getFieldDescriptorByName(fieldName); if (fld instanceof ReferenceDescriptor) { LOG.info("Key has a reference: " + pk.getName() + " " + cld.getName() + " " + fld.getName()); Set<String> refFieldNames = keyClassRefs.get(cld.getType());
q.setConstraint(cs); Map<String, Set<Object>> fieldNameToValues = new HashMap<String, Set<Object>>(); for (String fieldName : pk.getFieldNames()) { try { QueryField qf = new QueryField(qc, fieldName); boolean skipObject = false; Map<String, Set<Object>> fieldsValues = new HashMap<String, Set<Object>>(); for (String fieldName : pk.getFieldNames()) { try { Object value = object.getFieldProxy(fieldName); for (String fieldName : pk.getFieldNames()) { fieldNameToValues.get(fieldName).addAll(fieldsValues .get(fieldName)); if (keysToSourceObjects.containsKey(valueSet)) { throw new ObjectStoreException("Duplicate objects found for pk " + cld.getName() + "." + pk.getName() + ": " + object); for (ResultsRow<Object> row : tmpRes) { List<Object> values = new ArrayList<Object>(); for (int i = 1; i <= pk.getFieldNames().size(); i++) { values.add(row.get(i));
public void testConstructor() throws Exception { Model model = Model.getInstanceByName("basicmodel"); ClassDescriptor cld = model.getClassDescriptorByName("org.intermine.model.basicmodel.Employee"); Set<String> expected = new HashSet<String>(); expected.add("name"); expected.add("age"); assertEquals(expected, new PrimaryKey("key1", "name, age", cld).getFieldNames()); try { new PrimaryKey("key1", "name, age", null); fail("Expected NullPointerException"); } catch (NullPointerException e) { } try { new PrimaryKey("key1", "name, flibble", cld); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { } try { new PrimaryKey("key1", "name, departments", cld); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { } } }
public void testObjectPrimaryKeyIsNullNullField2() throws Exception { Source source = new Source("testsource"); Company c = (Company) DynamicUtil.createObject(Collections.singleton(Company.class)); c.setName("jkhsdfg"); Address a = new Address(); a.setAddress(null); c.setAddress(a); c.setVatNumber(765213); ClassDescriptor cld = model.getClassDescriptorByName("org.intermine.model.testmodel.Company"); Set<PrimaryKey> primaryKeys = new HashSet<PrimaryKey>(PrimaryKeyUtil.getPrimaryKeys(cld).values()); for (PrimaryKey pk: primaryKeys) { boolean isPrimaryKey = DataLoaderHelper.objectPrimaryKeyNotNull(model, c, cld, pk, source, new IntToIntMap()); if ("key1".equals(pk.getName())) { // Company.key1=name, address assertFalse(isPrimaryKey); } else { if ("key2".equals(pk.getName())) { // Company.key2=vatNumber assertTrue(isPrimaryKey); } else { fail("unknown primary key: " + pk); } } } }
q.setConstraint(cs); Map<String, Set<Object>> fieldNameToValues = new HashMap<String, Set<Object>>(); for (String fieldName : pk.getFieldNames()) { try { QueryField qf = new QueryField(qc, fieldName); boolean skipObject = false; Map<String, Set<Object>> fieldsValues = new HashMap<String, Set<Object>>(); for (String fieldName : pk.getFieldNames()) { try { Object value = object.getFieldProxy(fieldName); for (String fieldName : pk.getFieldNames()) { fieldNameToValues.get(fieldName).addAll(fieldsValues .get(fieldName)); if (keysToSourceObjects.containsKey(valueSet)) { throw new ObjectStoreException("Duplicate objects found for pk " + cld.getName() + "." + pk.getName() + ": " + object); for (ResultsRow<Object> row : tmpRes) { List<Object> values = new ArrayList<Object>(); for (int i = 1; i <= pk.getFieldNames().size(); i++) { values.add(row.get(i));
if (cldName.equals(propCldName)) { String keyName = propKey.substring(posOfDot + 1); PrimaryKey pk = new PrimaryKey(keyName, fieldList, cld); if (!keySet.contains(pk)) { keySet.add(pk); List<String> fields = new ArrayList<String>(); for (String field : pk.getFieldNames()) { String colName = DatabaseUtil.generateSqlCompatibleName(field);
ClassDescriptor cld, PrimaryKey pk, Source source, IntToIntMap idMap) throws MetaDataException { for (String fieldName : pk.getFieldNames()) { FieldDescriptor fd = cld.getFieldDescriptorByName(fieldName); if (fd instanceof AttributeDescriptor) { throw new MetaDataException("Primary key " + pk.getName() + " for class " + cld.getName() + " cannot contain collection " + fd.getName() + ": collections cannot be part of a primary key. Please edit"
/** * {@inheritDoc} */ @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append("<fields=\""); boolean needComma = false; for (String fieldName : getFieldNames()) { if (needComma) { sb.append(","); } sb.append(fieldName); } sb.append("\">"); return sb.toString(); } }
if (cldName.equals(propCldName)) { String keyName = propKey.substring(posOfDot + 1); PrimaryKey pk = new PrimaryKey(keyName, fieldList, cld); if (!keySet.contains(pk)) { keySet.add(pk); List<String> fields = new ArrayList<String>(); for (String field : pk.getFieldNames()) { String colName = DatabaseUtil.generateSqlCompatibleName(field);
public void testGetPrimaryKeysCldSource3() throws Exception { ClassDescriptor cld = model.getClassDescriptorByName("org.intermine.model.testmodel.Company"); Source source = new Source("testsource2"); assertEquals(new HashSet(Arrays.asList(new PrimaryKey("key1", "name, address", cld), new PrimaryKey("local_key", "name, vatNumber", cld))), DataLoaderHelper.getPrimaryKeys(cld, source, null)); }
getIntegrationWriter().getModel()); for (PrimaryKey pk :keysForSource) { for (String fieldName: pk.getFieldNames()) { ClassDescriptor cld = pk.getClassDescriptor(); FieldDescriptor fld = cld.getFieldDescriptorByName(fieldName); if (fld instanceof ReferenceDescriptor) { LOG.info("Key has a reference: " + pk.getName() + " " + cld.getName() + " " + fld.getName()); Set<String> refFieldNames = keyClassRefs.get(cld.getType());
ClassDescriptor cld, PrimaryKey pk, Source source, IntToIntMap idMap) throws MetaDataException { for (String fieldName : pk.getFieldNames()) { FieldDescriptor fd = cld.getFieldDescriptorByName(fieldName); if (fd instanceof AttributeDescriptor) { throw new MetaDataException("Primary key " + pk.getName() + " for class " + cld.getName() + " cannot contain collection " + fd.getName() + ": collections cannot be part of a primary key. Please edit"
/** * Returns true if the given field is a member of any primary key on the given class, for the * given source. * * @param model the Model in which to find ClassDescriptors * @param clazz the Class in which to look * @param fieldName the name of the field to check * @param source the Source that the keys belong to * @return true if the field is a primary key */ public static boolean fieldIsPrimaryKey(Model model, Class<?> clazz, String fieldName, Source source) { Map<PrimaryKeyCacheKey, Set<String>> cache = primaryKeyCache.get(); PrimaryKeyCacheKey key = new PrimaryKeyCacheKey(model, clazz, source); Set<String> fields = cache.get(key); if (fields == null) { fields = new HashSet<String>(); for (ClassDescriptor cld : model.getClassDescriptorsForClass(clazz)) { for (PrimaryKey pk : getPrimaryKeys(cld, source, null)) { fields.addAll(pk.getFieldNames()); } } cache.put(key, fields); } return fields.contains(fieldName); }
/** * Retrieve a map from key name to PrimaryKey object. The Map contains all the primary keys * that exist on a particular class, without performing any recursion. * * @param cld the ClassDescriptor to fetch primary keys for * @return the Map from key names to PrimaryKeys */ public static Map<String, PrimaryKey> getPrimaryKeys(ClassDescriptor cld) { Map<String, PrimaryKey> keyMap = primaryKeyCache.get(cld); if (keyMap == null) { keyMap = new LinkedHashMap<String, PrimaryKey>(); Properties keys = getKeyProperties(cld.getModel().getName()); String cldName = Util.unqualifiedName(cld.getName()); Properties cldKeys = Util.getPropertiesStartingWith(cldName, keys); cldKeys = Util.stripStart(cldName, cldKeys); List<String> keyNames = new ArrayList<String>(); for (Object key : cldKeys.keySet()) { if (key instanceof String) { keyNames.add((String) key); } } Collections.sort(keyNames); for (String keyName : keyNames) { PrimaryKey key = new PrimaryKey(keyName, (String) cldKeys.get(keyName), cld); keyMap.put(keyName, key); } primaryKeyCache.put(cld, keyMap); } return keyMap; }
query.addToSelect(qc); ConstraintSet cs = new ConstraintSet(ConstraintOp.AND); for (String fieldName : pk.getFieldNames()) { FieldDescriptor fd = cld.getFieldDescriptorByName(fieldName); if (fd instanceof AttributeDescriptor) { throw new MetaDataException("Primary key " + pk.getName() + " for class " + cld.getName() + " cannot contain collection " + fd.getName() + ": collections cannot be part of a primary key. Please edit"
/** * Returns true if the given field is a member of any primary key on the given class, for the * given source. * * @param model the Model in which to find ClassDescriptors * @param clazz the Class in which to look * @param fieldName the name of the field to check * @param source the Source that the keys belong to * @return true if the field is a primary key */ public static boolean fieldIsPrimaryKey(Model model, Class<?> clazz, String fieldName, Source source) { Map<PrimaryKeyCacheKey, Set<String>> cache = primaryKeyCache.get(); PrimaryKeyCacheKey key = new PrimaryKeyCacheKey(model, clazz, source); Set<String> fields = cache.get(key); if (fields == null) { fields = new HashSet<String>(); for (ClassDescriptor cld : model.getClassDescriptorsForClass(clazz)) { for (PrimaryKey pk : getPrimaryKeys(cld, source, null)) { fields.addAll(pk.getFieldNames()); } } cache.put(key, fields); } return fields.contains(fieldName); }
/** * Retrieve a map from key name to PrimaryKey object. The Map contains all the primary keys * that exist on a particular class, without performing any recursion. * * @param cld the ClassDescriptor to fetch primary keys for * @return the Map from key names to PrimaryKeys */ public static Map<String, PrimaryKey> getPrimaryKeys(ClassDescriptor cld) { Map<String, PrimaryKey> keyMap = primaryKeyCache.get(cld); if (keyMap == null) { keyMap = new LinkedHashMap<String, PrimaryKey>(); Properties keys = getKeyProperties(cld.getModel().getName()); String cldName = Util.unqualifiedName(cld.getName()); Properties cldKeys = Util.getPropertiesStartingWith(cldName, keys); cldKeys = Util.stripStart(cldName, cldKeys); List<String> keyNames = new ArrayList<String>(); for (Object key : cldKeys.keySet()) { if (key instanceof String) { keyNames.add((String) key); } } Collections.sort(keyNames); for (String keyName : keyNames) { PrimaryKey key = new PrimaryKey(keyName, (String) cldKeys.get(keyName), cld); keyMap.put(keyName, key); } primaryKeyCache.put(cld, keyMap); } return keyMap; }
query.addToSelect(qc); ConstraintSet cs = new ConstraintSet(ConstraintOp.AND); for (String fieldName : pk.getFieldNames()) { FieldDescriptor fd = cld.getFieldDescriptorByName(fieldName); if (fd instanceof AttributeDescriptor) { throw new MetaDataException("Primary key " + pk.getName() + " for class " + cld.getName() + " cannot contain collection " + fd.getName() + ": collections cannot be part of a primary key. Please edit"