Hi,
Thanks for your reply. So far I'm using javascript hooks so I can really
use your code for now. Thanks for your help anyway.
Miguel
Le vendredi 21 août 2015 17:53:45 UTC-4, Charles Munat a écrit :
>
> Sorry, I wasn't using JavaScript. I coded it in Java. For what it's worth,
> here's a pass at the code.
>
> Note: I am not a Java programmer so there may be easier ways of doing
> things (I hope so). Also, I have not yet purged unnecessary imports. My own
> code is a bit more complicated as whether I use "name" or some other
> property to create the slug varies by class (my code has a switch in there).
>
> Hope this helps.
>
> ```java
> package mysite.hooks;
> import java.io.BufferedReader;
> import java.io.FileNotFoundException;
> import java.io.InputStream;
> import java.io.InputStreamReader;
> import java.io.StringReader;
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Properties;
> import java.util.concurrent.locks.ReentrantLock;
> import com.orientechnologies.orient.core.hook.ODocumentHookAbstract;
> import com.orientechnologies.orient.core.hook.ORecordHook;
> import com.orientechnologies.orient.core.hook.ORecordHookAbstract;
> import com.orientechnologies.orient.core.db.ODatabaseLifecycleListener;
> import com.orientechnologies.orient.core.db.ODatabase;
> import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
> import com.orientechnologies.orient.core.record.ORecord;
> import com.orientechnologies.orient.core.record.impl.ODocument;
> import com.orientechnologies.orient.core.metadata.schema.OType;
> import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
>
> public class setSlug extends ODocumentHookAbstract implements ORecordHook {
>
> private static Properties diacritics;
>
> public setSlug() {
> setIncludeClasses(...);
>
> diacritics = new Properties();
>
> diacritics.put("\u0041", "A");
> diacritics.put("\u24B6", "A");
> diacritics.put("\uFF21", "A");
> // remaining diacritics
> }
>
> @Override
> public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
> return DISTRIBUTED_EXECUTION_MODE.SOURCE_NODE;
> }
>
> public String convertChar( String s ) {
> try {
> return diacritics.get(s).toString();
> } catch (Exception e) {
> return "";
> }
> }
>
> public RESULT onRecordBeforeCreate( ODocument iDocument ) {
> String temp = "";
> String slug;
> int flag;
>
> String text = iDocument.field("name", OType.STRING);
>
> for(char c : text.toCharArray()) {
> temp += convertChar(Character.toString(c));
> }
>
> slug = temp.replaceAll("[_]+", "-").toLowerCase();
>
> try {
> OSQLSynchQuery<ODocument> query =
> new OSQLSynchQuery<ODocument>("select max(flag) from " +
> iDocument.getClassName() + " where slug = ?");
> List<ODocument> result =
> iDocument.getDatabase().command(query).execute(slug);
>
> flag =
> ((Integer) result.get(0).field("max", OType.INTEGER)).intValue() +
> 1;
>
> iDocument.field("flag", flag);
> } catch (Exception e) {
> iDocument.field("flag", 0);
> }
>
> iDocument.field("slug", slug);
>
> return ORecordHook.RESULT.RECORD_CHANGED;
> }
> }
> ```
>
> On Saturday, August 22, 2015 at 4:00:01 AM UTC+12, Miguel wrote:
>>
>> Hi Charles,
>>
>> Could you please provide some example code? I'm looking at doing
>> something similar and I cannot find any documentation on how to code a hook
>> in javascript.
>> Your help would be much appreciated.
>>
>> Miguel
>>
>> Le mardi 11 août 2015 06:02:22 UTC-4, Charles Munat a écrit :
>>>
>>> I did that and managed to get it working. A slug is used in a URL to
>>> identify a resource, usually by "traincasing" its name, e.g.,
>>> /cool-blog-post-2015-07-31. It makes for a better, more aesthetic, and
>>> human-readable URL compared to using UUIDs.
>>>
>>> Chas.
>>>
>>> On Tuesday, August 11, 2015 at 5:59:07 AM UTC+12, David Carr wrote:
>>>>
>>>> I'm not familiar with the term slug but you should be able to do this
>>>> via a hook (aka insert trigger). I have a few insert triggers that work
>>>> well. Try to follow the tutorial here
>>>> http://orientdb.com/docs/last/Tutorial-Java-Hooks.html.
>>>>
>>>> On Sunday, August 9, 2015 at 3:27:13 AM UTC-6, Charles Munat wrote:
>>>>>
>>>>> I want to create a slug from a user's name and save it when the record
>>>>> is created. In PostgreSQL this is easy with a procedure and a trigger,
>>>>> but
>>>>> I can't for the life of me figure out how to do it in OrientDB. I need to
>>>>> a) get hold of the name field of the document within the javascript
>>>>> function onBeforeCreate, and b) I need to compare the slug to all the
>>>>> other
>>>>> slugs to ensure that it is unqiue, and to add an incremented integer if
>>>>> it
>>>>> is not.
>>>>>
>>>>> It would be nice to have a simple function that I could call on
>>>>> default for the slug field (better still if I could pass it the name of
>>>>> the
>>>>> field or fields to be used to create the slug). Barring that, a dynamic
>>>>> hook.
>>>>>
>>>>> What is the best practice, or can someone provide a link to where this
>>>>> is covered in the documentation? I can't find it.
>>>>>
>>>>> TIA,
>>>>>
>>>>> Chas. Munat
>>>>>
>>>>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.