<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi All,<div class=""><br class=""></div><div class="">This weekend I changed the Resource class and added the ResourceComponent class:</div><div class=""><br class=""></div><div class=""><div class="">class SMTKCORE_EXPORT Resource : smtkEnableSharedPtr(Resource)</div><div class="">{</div><div class="">  friend class ResourceManager;</div><div class="">public:</div><div class="">  smtkTypeMacro(Resource);</div><div class="">  virtual ~Resource();</div><div class="">  std::string location() const;  </div><div class="">  ResourceManager *manager() const</div><div class="">  const UUID& id() const;</div><div class=""><br class=""></div><div class="">// Would like to get rid of the following but ResourceSet needs them</div><div class="">  /// Identifies resource type</div><div class="">  enum Type</div><div class="">  {</div><div class="">    ATTRIBUTE = 0,</div><div class="">    MODEL,</div><div class="">    MESH, // future</div><div class="">    NUMBER_OF_TYPES</div><div class="">  };</div><div class=""><br class=""></div><div class="">  virtual Resource::Type resourceType() const = 0;</div><div class="">  virtual ResourceComponentPtr find(const UUID& compId) const = 0;</div><div class=""><br class=""></div><div class="">  static std::string type2String(Resource::Type t);</div><div class="">  static Resource::Type string2Type(const std::string& s);</div><div class=""><br class=""></div><div class="">protected:</div><div class="">  Resource(const UUID &myID, ResourceManager *manager);</div><div class="">  Resource(ResourceManager *manager);</div><div class="">  void setId(const UUID &myID);  </div><div class="">  void setLocation(const std::string &url);</div><div class=""><br class=""></div><div class=""> private:</div><div class="">  UUID m_id;</div><div class="">  std::string m_url;</div><div class="">  ResourceManager *m_manager;</div><div class=""><br class=""></div><div class="">};</div><div class=""><br class=""></div><div class=""><div class="">class SMTKCORE_EXPORT ResourceComponent : smtkEnableSharedPtr(ResourceComponent)</div><div class="">{</div><div class="">  friend class Resource;</div><div class="">public:</div><div class="">  smtkTypeMacro(ResourceComponent);</div><div class="">  virtual ~ResourceComponent();</div><div class="">  virtual ResourcePtr resource() const = 0;</div><div class="">  </div><div class="">  const UUID& id() const</div><div class="">  {return this->m_id;}</div><div class=""><br class=""></div><div class="">protected:</div><div class="">  ResourceComponent(const UUID &myID);</div><div class="">  ResourceComponent();</div><div class="">  void setId(const UUID &myID)</div><div class="">  {this->m_id = myID;}</div><div class="">  </div><div class=""> private:</div><div class="">  UUID m_id;</div><div class=""><br class=""></div><div class="">};</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Now there are two classes that are related to Resources : common/ResourceSet and model/StoredResource.  Its ResourceSet that seems to be used the Resource::Type information and StoredResource seems to be tracking stored Model Resources.  What I think needs to be done is:</div><div class=""><br class=""></div><div class="">ResourceSet —> Project or ResourceManager</div><div class="">StoredResource —> Resource (meaning we need to move some of its functionality over to Resource)</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">StoreResource has the following API:</div><div class=""><br class=""></div><div class=""><div class="">class SMTKCORE_EXPORT StoredResource : public smtk::common::Resource</div><div class="">{</div><div class="">public:</div><div class="">  smtkTypeMacro(StoredResource);</div><div class="">  smtkCreateMacro(StoredResource);</div><div class="">  smtkSharedFromThisMacro(smtk::common::Resource);</div><div class=""><br class=""></div><div class="">  virtual ~StoredResource();</div><div class=""><br class=""></div><div class="">  std::string url() const;</div><div class="">  bool setURL(const std::string& url, bool isModified = false);</div><div class=""><br class=""></div><div class="">  void markModified(bool isDirty = true);</div><div class="">  bool isModified() const;</div><div class="">  int generation() const;</div><div class=""><br class=""></div><div class="">  bool exists(const std::string& prefix = "") const;</div><div class=""><br class=""></div><div class="">  Resource::Type resourceType() const override { return MODEL; }</div><div class="">  smtk::common::ResourceComponentPtr find(const smtk::common::UUID& compId) const override;</div><div class=""><br class=""></div><div class="">  bool addEntity(const EntityRef& ent);</div><div class="">  bool removeEntity(const EntityRef& ent);</div><div class="">  const EntityRefs& entities() const { return this->m_entities; }</div><div class="">  SessionRef session() const;</div><div class=""><br class=""></div><div class="">  size_t addURLDisposition(const URLDisposition& disposition);</div><div class="">  const std::vector<URLDisposition>& dispositions() const { return this->m_dispositions; }</div><div class="">  bool clearDispositions();</div><div class=""><br class=""></div></div><div class=""><div class="">protected:</div><div class="">  StoredResource();</div><div class=""><br class=""></div><div class="">  void setGeneration(int gen);</div><div class=""><br class=""></div><div class="">  std::string m_url; // The location where this resource is stored.</div><div class="">  int m_generation;  // The generation number the last time an entity in the resource was modified.</div><div class="">  int</div><div class="">    m_urlGeneration; // The generation number at the last time the resource was written to/read from disk.</div><div class="">  EntityRefs m_entities; // The model entities stored by this resource.</div><div class="">  std::vector<URLDisposition></div><div class="">    m_dispositions; // Used to plan a write operation; only valid during writes.</div><div class="">};</div></div><div class=""><br class=""></div><div class=""><ul class="MailOutline"><li class="">The url method is already in Resource (its called location)</li><li class="">isModified() and markModified(..) seem to make sense</li><li class="">generation() - is this like modifiedTime()?  Should it be a posix date-time and should it be set when the Resource is saved?</li><li class="">No Clue as to what Dispositions are and why we need them.</li></ul></div><div class=""><br class=""></div><div class="">Comments?</div><div class=""><br class=""></div><div class="">Bob</div><div class=""><br class=""></div><div class="">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Robert M. O'Bara, MEng.<br class="">Assistant Director of Scientific Computing<br class=""><br class="">Kitware Inc.<br class="">28 Corporate Drive<br class="">Suite 101<br class="">Clifton Park, NY 12065<br class=""><br class="">Phone: (518) 881- 4931</div><div class=""><br class=""></div></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>

<br class=""></div></body></html>