Programmatically check if a field in a domino document is a Text or a TextList - is it possible?
I am trying to implement a method that replaces all values inside a Hashmap with all the values inside a document.
The idea behind that is that I loop through all items
that I get from Document.getItems()
and simply use the Item.getType()
method so I can decide what type I use for which field.
Something like that:
private void replace(SomeClass model, Document document) {
Map<String, Object> objectsMap = model.getObjectsMap();
Vector<Item> items = document.getItems();
for(Item item : items) {
if(item.getType() == Item.TEXT) {
model.add(item.getName(), item.getValueString()); // model.add(...) is basically a Map.put(String key, Object value);
} else if(item.getType() == Item.AUTHORS) {
// ...
} else if(/*...*/) {
// ...
}
}
}
Now my problem is that I cannot distinguish between a Text
and a TextList
because getType()
returns 1280 for both.
Has anyone tried something like that already or maybe can give me a hint of what approach might be a workaround?
EDIT
Regarding the idea from one of the comments, to use a TextList
when item.getValues().size() > 1
and Text
otherwise:
As mentioned in the comment the problem is, that I want to be able to use the field later as well.
For example:
If I have a TextList
field with one item in the document, and I would use the approach described above, I would put a String inside the Map
for this field.
If I want to add more Items to this field (which should be a Vector
since originally it was a TextList
) I wouldn't be able to - at least not in a straight forward way.
java xpages lotus-notes document lotus-domino
add a comment |
I am trying to implement a method that replaces all values inside a Hashmap with all the values inside a document.
The idea behind that is that I loop through all items
that I get from Document.getItems()
and simply use the Item.getType()
method so I can decide what type I use for which field.
Something like that:
private void replace(SomeClass model, Document document) {
Map<String, Object> objectsMap = model.getObjectsMap();
Vector<Item> items = document.getItems();
for(Item item : items) {
if(item.getType() == Item.TEXT) {
model.add(item.getName(), item.getValueString()); // model.add(...) is basically a Map.put(String key, Object value);
} else if(item.getType() == Item.AUTHORS) {
// ...
} else if(/*...*/) {
// ...
}
}
}
Now my problem is that I cannot distinguish between a Text
and a TextList
because getType()
returns 1280 for both.
Has anyone tried something like that already or maybe can give me a hint of what approach might be a workaround?
EDIT
Regarding the idea from one of the comments, to use a TextList
when item.getValues().size() > 1
and Text
otherwise:
As mentioned in the comment the problem is, that I want to be able to use the field later as well.
For example:
If I have a TextList
field with one item in the document, and I would use the approach described above, I would put a String inside the Map
for this field.
If I want to add more Items to this field (which should be a Vector
since originally it was a TextList
) I wouldn't be able to - at least not in a straight forward way.
java xpages lotus-notes document lotus-domino
add a comment |
I am trying to implement a method that replaces all values inside a Hashmap with all the values inside a document.
The idea behind that is that I loop through all items
that I get from Document.getItems()
and simply use the Item.getType()
method so I can decide what type I use for which field.
Something like that:
private void replace(SomeClass model, Document document) {
Map<String, Object> objectsMap = model.getObjectsMap();
Vector<Item> items = document.getItems();
for(Item item : items) {
if(item.getType() == Item.TEXT) {
model.add(item.getName(), item.getValueString()); // model.add(...) is basically a Map.put(String key, Object value);
} else if(item.getType() == Item.AUTHORS) {
// ...
} else if(/*...*/) {
// ...
}
}
}
Now my problem is that I cannot distinguish between a Text
and a TextList
because getType()
returns 1280 for both.
Has anyone tried something like that already or maybe can give me a hint of what approach might be a workaround?
EDIT
Regarding the idea from one of the comments, to use a TextList
when item.getValues().size() > 1
and Text
otherwise:
As mentioned in the comment the problem is, that I want to be able to use the field later as well.
For example:
If I have a TextList
field with one item in the document, and I would use the approach described above, I would put a String inside the Map
for this field.
If I want to add more Items to this field (which should be a Vector
since originally it was a TextList
) I wouldn't be able to - at least not in a straight forward way.
java xpages lotus-notes document lotus-domino
I am trying to implement a method that replaces all values inside a Hashmap with all the values inside a document.
The idea behind that is that I loop through all items
that I get from Document.getItems()
and simply use the Item.getType()
method so I can decide what type I use for which field.
Something like that:
private void replace(SomeClass model, Document document) {
Map<String, Object> objectsMap = model.getObjectsMap();
Vector<Item> items = document.getItems();
for(Item item : items) {
if(item.getType() == Item.TEXT) {
model.add(item.getName(), item.getValueString()); // model.add(...) is basically a Map.put(String key, Object value);
} else if(item.getType() == Item.AUTHORS) {
// ...
} else if(/*...*/) {
// ...
}
}
}
Now my problem is that I cannot distinguish between a Text
and a TextList
because getType()
returns 1280 for both.
Has anyone tried something like that already or maybe can give me a hint of what approach might be a workaround?
EDIT
Regarding the idea from one of the comments, to use a TextList
when item.getValues().size() > 1
and Text
otherwise:
As mentioned in the comment the problem is, that I want to be able to use the field later as well.
For example:
If I have a TextList
field with one item in the document, and I would use the approach described above, I would put a String inside the Map
for this field.
If I want to add more Items to this field (which should be a Vector
since originally it was a TextList
) I wouldn't be able to - at least not in a straight forward way.
java xpages lotus-notes document lotus-domino
java xpages lotus-notes document lotus-domino
edited Nov 21 '18 at 15:34
asked Nov 21 '18 at 13:57
VIC
105
105
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
NotesItems always return A Vector for values. There is no distinction between text and textList. However what you could do: get the form object and check the field properties. If allow multi value is ticked, then you can presume it was intended as textList rather than text.
That should sort your conversion decision. You also could flag items with more than one value that don’t have allow multi value set in the field - code would have done that
Well that is unfortunate, that there is no way to reliably check if it is a Text or a TextList - However your answer is the best one so far. Thank you for your help.
– VIC
Nov 23 '18 at 9:23
You need to recheck your mental model. The value of a NotesItem is neither a text nor a textlist. It is a vector. Now you want to map that vector to a text list (easy) or for the special case that it has one value only AND the INTENTION of the developer was that it should be limited to one value only. This intention is programmatically documented in the field on the form. That’s quite reliable
– stwissel
Nov 23 '18 at 13:10
The only catch: since it is an “intention” and not an enforceable constraint, code, but not the UI, can add additional values to an item that was intended as single value. Normal mortal users hardly get access to such code and you could read the form also on Notes -> Java conversion and treat unintended multivalues as single string using item.text
– stwissel
Nov 23 '18 at 13:16
add a comment |
You could check the size of item.getValues() - which returns a Vector . If the size of the vector is > 0 it is a textilst.
Unfortunately, that doesn't work. Because if I get aText
field usingitem.getValues
and ask for the size it will be 1. And if it is aTextList
field with one item,size()
will return 1 as well
– VIC
Nov 21 '18 at 15:08
@VIC So there is your solution, if the size is 1 it's a Text and if it's larger it's a TexList. If it's smaller or null then it's empty
– Joakim Danielson
Nov 21 '18 at 15:10
@JoakimDanielson not really. If I want to add more items to theTextList
(which should be aVector
at this point) that had only one item so far, I can't do this anymore since we converted theVector
to aTextList
and it will be considered aString
inside theMap
- I think I forgot to mention that the replace functionality should be able to handle both: document to map, and map to document
– VIC
Nov 21 '18 at 15:23
1
Unfortunately,TextList
is not a type. You can set 'Allow Multiple values' on a form field, but there is no direct way to get to this property. If the field is on a form (which is not always the case), you might try to retrieve the property trough DXL, but this is very complex and time consuming. In Java, all fields are considered MV. Even computeWithForm won't correct this. It is only when you save the document through the UI (Notes Client), that it takes Single/Multi value into account.
– Tom Van Aken
Nov 22 '18 at 9:31
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53413692%2fprogrammatically-check-if-a-field-in-a-domino-document-is-a-text-or-a-textlist%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
NotesItems always return A Vector for values. There is no distinction between text and textList. However what you could do: get the form object and check the field properties. If allow multi value is ticked, then you can presume it was intended as textList rather than text.
That should sort your conversion decision. You also could flag items with more than one value that don’t have allow multi value set in the field - code would have done that
Well that is unfortunate, that there is no way to reliably check if it is a Text or a TextList - However your answer is the best one so far. Thank you for your help.
– VIC
Nov 23 '18 at 9:23
You need to recheck your mental model. The value of a NotesItem is neither a text nor a textlist. It is a vector. Now you want to map that vector to a text list (easy) or for the special case that it has one value only AND the INTENTION of the developer was that it should be limited to one value only. This intention is programmatically documented in the field on the form. That’s quite reliable
– stwissel
Nov 23 '18 at 13:10
The only catch: since it is an “intention” and not an enforceable constraint, code, but not the UI, can add additional values to an item that was intended as single value. Normal mortal users hardly get access to such code and you could read the form also on Notes -> Java conversion and treat unintended multivalues as single string using item.text
– stwissel
Nov 23 '18 at 13:16
add a comment |
NotesItems always return A Vector for values. There is no distinction between text and textList. However what you could do: get the form object and check the field properties. If allow multi value is ticked, then you can presume it was intended as textList rather than text.
That should sort your conversion decision. You also could flag items with more than one value that don’t have allow multi value set in the field - code would have done that
Well that is unfortunate, that there is no way to reliably check if it is a Text or a TextList - However your answer is the best one so far. Thank you for your help.
– VIC
Nov 23 '18 at 9:23
You need to recheck your mental model. The value of a NotesItem is neither a text nor a textlist. It is a vector. Now you want to map that vector to a text list (easy) or for the special case that it has one value only AND the INTENTION of the developer was that it should be limited to one value only. This intention is programmatically documented in the field on the form. That’s quite reliable
– stwissel
Nov 23 '18 at 13:10
The only catch: since it is an “intention” and not an enforceable constraint, code, but not the UI, can add additional values to an item that was intended as single value. Normal mortal users hardly get access to such code and you could read the form also on Notes -> Java conversion and treat unintended multivalues as single string using item.text
– stwissel
Nov 23 '18 at 13:16
add a comment |
NotesItems always return A Vector for values. There is no distinction between text and textList. However what you could do: get the form object and check the field properties. If allow multi value is ticked, then you can presume it was intended as textList rather than text.
That should sort your conversion decision. You also could flag items with more than one value that don’t have allow multi value set in the field - code would have done that
NotesItems always return A Vector for values. There is no distinction between text and textList. However what you could do: get the form object and check the field properties. If allow multi value is ticked, then you can presume it was intended as textList rather than text.
That should sort your conversion decision. You also could flag items with more than one value that don’t have allow multi value set in the field - code would have done that
answered Nov 22 '18 at 1:36
stwissel
16.9k33378
16.9k33378
Well that is unfortunate, that there is no way to reliably check if it is a Text or a TextList - However your answer is the best one so far. Thank you for your help.
– VIC
Nov 23 '18 at 9:23
You need to recheck your mental model. The value of a NotesItem is neither a text nor a textlist. It is a vector. Now you want to map that vector to a text list (easy) or for the special case that it has one value only AND the INTENTION of the developer was that it should be limited to one value only. This intention is programmatically documented in the field on the form. That’s quite reliable
– stwissel
Nov 23 '18 at 13:10
The only catch: since it is an “intention” and not an enforceable constraint, code, but not the UI, can add additional values to an item that was intended as single value. Normal mortal users hardly get access to such code and you could read the form also on Notes -> Java conversion and treat unintended multivalues as single string using item.text
– stwissel
Nov 23 '18 at 13:16
add a comment |
Well that is unfortunate, that there is no way to reliably check if it is a Text or a TextList - However your answer is the best one so far. Thank you for your help.
– VIC
Nov 23 '18 at 9:23
You need to recheck your mental model. The value of a NotesItem is neither a text nor a textlist. It is a vector. Now you want to map that vector to a text list (easy) or for the special case that it has one value only AND the INTENTION of the developer was that it should be limited to one value only. This intention is programmatically documented in the field on the form. That’s quite reliable
– stwissel
Nov 23 '18 at 13:10
The only catch: since it is an “intention” and not an enforceable constraint, code, but not the UI, can add additional values to an item that was intended as single value. Normal mortal users hardly get access to such code and you could read the form also on Notes -> Java conversion and treat unintended multivalues as single string using item.text
– stwissel
Nov 23 '18 at 13:16
Well that is unfortunate, that there is no way to reliably check if it is a Text or a TextList - However your answer is the best one so far. Thank you for your help.
– VIC
Nov 23 '18 at 9:23
Well that is unfortunate, that there is no way to reliably check if it is a Text or a TextList - However your answer is the best one so far. Thank you for your help.
– VIC
Nov 23 '18 at 9:23
You need to recheck your mental model. The value of a NotesItem is neither a text nor a textlist. It is a vector. Now you want to map that vector to a text list (easy) or for the special case that it has one value only AND the INTENTION of the developer was that it should be limited to one value only. This intention is programmatically documented in the field on the form. That’s quite reliable
– stwissel
Nov 23 '18 at 13:10
You need to recheck your mental model. The value of a NotesItem is neither a text nor a textlist. It is a vector. Now you want to map that vector to a text list (easy) or for the special case that it has one value only AND the INTENTION of the developer was that it should be limited to one value only. This intention is programmatically documented in the field on the form. That’s quite reliable
– stwissel
Nov 23 '18 at 13:10
The only catch: since it is an “intention” and not an enforceable constraint, code, but not the UI, can add additional values to an item that was intended as single value. Normal mortal users hardly get access to such code and you could read the form also on Notes -> Java conversion and treat unintended multivalues as single string using item.text
– stwissel
Nov 23 '18 at 13:16
The only catch: since it is an “intention” and not an enforceable constraint, code, but not the UI, can add additional values to an item that was intended as single value. Normal mortal users hardly get access to such code and you could read the form also on Notes -> Java conversion and treat unintended multivalues as single string using item.text
– stwissel
Nov 23 '18 at 13:16
add a comment |
You could check the size of item.getValues() - which returns a Vector . If the size of the vector is > 0 it is a textilst.
Unfortunately, that doesn't work. Because if I get aText
field usingitem.getValues
and ask for the size it will be 1. And if it is aTextList
field with one item,size()
will return 1 as well
– VIC
Nov 21 '18 at 15:08
@VIC So there is your solution, if the size is 1 it's a Text and if it's larger it's a TexList. If it's smaller or null then it's empty
– Joakim Danielson
Nov 21 '18 at 15:10
@JoakimDanielson not really. If I want to add more items to theTextList
(which should be aVector
at this point) that had only one item so far, I can't do this anymore since we converted theVector
to aTextList
and it will be considered aString
inside theMap
- I think I forgot to mention that the replace functionality should be able to handle both: document to map, and map to document
– VIC
Nov 21 '18 at 15:23
1
Unfortunately,TextList
is not a type. You can set 'Allow Multiple values' on a form field, but there is no direct way to get to this property. If the field is on a form (which is not always the case), you might try to retrieve the property trough DXL, but this is very complex and time consuming. In Java, all fields are considered MV. Even computeWithForm won't correct this. It is only when you save the document through the UI (Notes Client), that it takes Single/Multi value into account.
– Tom Van Aken
Nov 22 '18 at 9:31
add a comment |
You could check the size of item.getValues() - which returns a Vector . If the size of the vector is > 0 it is a textilst.
Unfortunately, that doesn't work. Because if I get aText
field usingitem.getValues
and ask for the size it will be 1. And if it is aTextList
field with one item,size()
will return 1 as well
– VIC
Nov 21 '18 at 15:08
@VIC So there is your solution, if the size is 1 it's a Text and if it's larger it's a TexList. If it's smaller or null then it's empty
– Joakim Danielson
Nov 21 '18 at 15:10
@JoakimDanielson not really. If I want to add more items to theTextList
(which should be aVector
at this point) that had only one item so far, I can't do this anymore since we converted theVector
to aTextList
and it will be considered aString
inside theMap
- I think I forgot to mention that the replace functionality should be able to handle both: document to map, and map to document
– VIC
Nov 21 '18 at 15:23
1
Unfortunately,TextList
is not a type. You can set 'Allow Multiple values' on a form field, but there is no direct way to get to this property. If the field is on a form (which is not always the case), you might try to retrieve the property trough DXL, but this is very complex and time consuming. In Java, all fields are considered MV. Even computeWithForm won't correct this. It is only when you save the document through the UI (Notes Client), that it takes Single/Multi value into account.
– Tom Van Aken
Nov 22 '18 at 9:31
add a comment |
You could check the size of item.getValues() - which returns a Vector . If the size of the vector is > 0 it is a textilst.
You could check the size of item.getValues() - which returns a Vector . If the size of the vector is > 0 it is a textilst.
answered Nov 21 '18 at 15:00
Michael Ruhnau
1,1041614
1,1041614
Unfortunately, that doesn't work. Because if I get aText
field usingitem.getValues
and ask for the size it will be 1. And if it is aTextList
field with one item,size()
will return 1 as well
– VIC
Nov 21 '18 at 15:08
@VIC So there is your solution, if the size is 1 it's a Text and if it's larger it's a TexList. If it's smaller or null then it's empty
– Joakim Danielson
Nov 21 '18 at 15:10
@JoakimDanielson not really. If I want to add more items to theTextList
(which should be aVector
at this point) that had only one item so far, I can't do this anymore since we converted theVector
to aTextList
and it will be considered aString
inside theMap
- I think I forgot to mention that the replace functionality should be able to handle both: document to map, and map to document
– VIC
Nov 21 '18 at 15:23
1
Unfortunately,TextList
is not a type. You can set 'Allow Multiple values' on a form field, but there is no direct way to get to this property. If the field is on a form (which is not always the case), you might try to retrieve the property trough DXL, but this is very complex and time consuming. In Java, all fields are considered MV. Even computeWithForm won't correct this. It is only when you save the document through the UI (Notes Client), that it takes Single/Multi value into account.
– Tom Van Aken
Nov 22 '18 at 9:31
add a comment |
Unfortunately, that doesn't work. Because if I get aText
field usingitem.getValues
and ask for the size it will be 1. And if it is aTextList
field with one item,size()
will return 1 as well
– VIC
Nov 21 '18 at 15:08
@VIC So there is your solution, if the size is 1 it's a Text and if it's larger it's a TexList. If it's smaller or null then it's empty
– Joakim Danielson
Nov 21 '18 at 15:10
@JoakimDanielson not really. If I want to add more items to theTextList
(which should be aVector
at this point) that had only one item so far, I can't do this anymore since we converted theVector
to aTextList
and it will be considered aString
inside theMap
- I think I forgot to mention that the replace functionality should be able to handle both: document to map, and map to document
– VIC
Nov 21 '18 at 15:23
1
Unfortunately,TextList
is not a type. You can set 'Allow Multiple values' on a form field, but there is no direct way to get to this property. If the field is on a form (which is not always the case), you might try to retrieve the property trough DXL, but this is very complex and time consuming. In Java, all fields are considered MV. Even computeWithForm won't correct this. It is only when you save the document through the UI (Notes Client), that it takes Single/Multi value into account.
– Tom Van Aken
Nov 22 '18 at 9:31
Unfortunately, that doesn't work. Because if I get a
Text
field using item.getValues
and ask for the size it will be 1. And if it is a TextList
field with one item, size()
will return 1 as well– VIC
Nov 21 '18 at 15:08
Unfortunately, that doesn't work. Because if I get a
Text
field using item.getValues
and ask for the size it will be 1. And if it is a TextList
field with one item, size()
will return 1 as well– VIC
Nov 21 '18 at 15:08
@VIC So there is your solution, if the size is 1 it's a Text and if it's larger it's a TexList. If it's smaller or null then it's empty
– Joakim Danielson
Nov 21 '18 at 15:10
@VIC So there is your solution, if the size is 1 it's a Text and if it's larger it's a TexList. If it's smaller or null then it's empty
– Joakim Danielson
Nov 21 '18 at 15:10
@JoakimDanielson not really. If I want to add more items to the
TextList
(which should be a Vector
at this point) that had only one item so far, I can't do this anymore since we converted the Vector
to a TextList
and it will be considered a String
inside the Map
- I think I forgot to mention that the replace functionality should be able to handle both: document to map, and map to document– VIC
Nov 21 '18 at 15:23
@JoakimDanielson not really. If I want to add more items to the
TextList
(which should be a Vector
at this point) that had only one item so far, I can't do this anymore since we converted the Vector
to a TextList
and it will be considered a String
inside the Map
- I think I forgot to mention that the replace functionality should be able to handle both: document to map, and map to document– VIC
Nov 21 '18 at 15:23
1
1
Unfortunately,
TextList
is not a type. You can set 'Allow Multiple values' on a form field, but there is no direct way to get to this property. If the field is on a form (which is not always the case), you might try to retrieve the property trough DXL, but this is very complex and time consuming. In Java, all fields are considered MV. Even computeWithForm won't correct this. It is only when you save the document through the UI (Notes Client), that it takes Single/Multi value into account.– Tom Van Aken
Nov 22 '18 at 9:31
Unfortunately,
TextList
is not a type. You can set 'Allow Multiple values' on a form field, but there is no direct way to get to this property. If the field is on a form (which is not always the case), you might try to retrieve the property trough DXL, but this is very complex and time consuming. In Java, all fields are considered MV. Even computeWithForm won't correct this. It is only when you save the document through the UI (Notes Client), that it takes Single/Multi value into account.– Tom Van Aken
Nov 22 '18 at 9:31
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53413692%2fprogrammatically-check-if-a-field-in-a-domino-document-is-a-text-or-a-textlist%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown