/** * This method should be called only if it has been determined that field schema should be created * (or deleted). Create the {@link CustomField} for the metadata API to use during deploy * * @param cmd the class metadata for the entity * @param storeManager the store manager */ public void createCustomFields(AbstractClassMetaData cmd, ForceStoreManager storeManager) { synchronized (cmd) { try { if (cmd.isEmbeddedOnly() || PersistenceUtils.isReadOnlySchema(cmd, false)) return; ForceManagedConnection mconn = storeManager.createConnection(); try { ForceColumnMetaData cols = new ForceColumnMetaData(cmd, tableImpl, storeManager); cols.createFieldSchema(mconn.getNamespace()); if (customObject == null) { createCustomObjectStub(); } cols.addFieldsToObject(customObject); } catch (NucleusException ce) { throw ce; } catch (Exception e) { throw new NucleusException(e.getMessage(), e); } finally { mconn.close(); } } catch (Exception e) { throw new NucleusUserException( "Exception during initialisation of metadata for " + cmd.getFullClassName(), e); } } }
/** * if a {@link CustomObject} needed to be created for this entity, pass it to the schema writer * which will store it and then later write all objects and fields at once. Pass all fields on the * custom object to the schema writer as well * * @param storeManager the store manager * @param mconn the managed connection that contains connections for the Force.com APIs */ public void emit(ForceStoreManager storeManager, ForceManagedConnection mconn) { try { ForceSchemaWriter schemaWriter = storeManager.getSchemaWriter(); if (customObject != null) { schemaWriter.addCustomObject(customObject, cmd, storeManager, this); for (CustomField field : customObject.getFields()) { schemaWriter.addCustomField(customObject, field); } customObject = null; } } catch (Exception x) { throw new NucleusException(x.getMessage(), x); } // Clear metadata in tableImpl tableImpl.clearMetaData(); }