Извините, я не мог придумать более точное название, но, надеюсь, мне удастся объяснить проблему здесь. У меня есть объект (DataType), который действует как элемент HTML SELECT, это контейнер для предварительно определенных значений (DataTypeValues). Значения устанавливаются в определенном порядке, и в базе данных первичный ключ состоит из значения DataTypeValues и позиции. Когда отображается на JSP, это выглядит примерно так
1 Первое значение
2 Второе значение
3 Третье значение
и так далее. Теперь у пользователя есть возможность изменить порядок сортировки, выбрав любой элемент, который станет верхним или нижним элементом (также для переключения мест, но я его получил). Теперь, так как числа являются частями первичного ключа, я могу либо добавить новый столбец DisplayOrder (что было бы неприятно, потому что есть хранимые процедуры и другие модификации, которых я бы с удовольствием избежал), либо сделать то, что я сделал для переключения, и это переключение данных, например. как то так
String temporarayValueContainer = firstDataTypeValue.getValue();
firstDataTypeValue.setValue(secondDataTypeValue.getValue());
secondDataTypeValue.setValue(temporarayValueContainer);
Теперь я хотел бы сделать что-то подобное, но я не могу понять алгоритм. Есть идеи?
РЕДАКТИРОВАТЬ: Итак, вот что я попробовал:
public void setDomainPosition(SpisVrijDomene selected, String position, List vrijDomeneList) throws SpisException {
List sadrzajList = new ArrayList();
if (position.equals("TOP")) {
//I save the selected items as the first item in the list
sadrzajList.add(selected.getSadrzaj());
// I save all the other values, up to the selected value.
for (int i=1;i<vrijDomeneList.size();i++) {
SpisVrijDomene currentVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i);
SpisVrijDomene previousVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i-1);
sadrzajList.add(previousVrijDomene.getSadrzaj());
if (currentVrijDomene.equals(selected))
break;
}
}
else if (position.equals("BOTTOM")) {
sadrzajList.add(selected.getSadrzaj());
for (int i=vrijDomeneList.size()-1;i>0;i--) {
SpisVrijDomene currentVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i);
SpisVrijDomene nextVrijDomene = (SpisVrijDomene)vrijDomeneList.get(i-1);
sadrzajList.add(nextVrijDomene.getSadrzaj());
if (currentVrijDomene.equals(selected))
break;
}
}
// Here I set the items new values function and return value
}
Так что это должно работать так:
Start:
1 First value
2 Second value
3 Third value
4 Fourth value
5 Fifth value
Допустим, пользователь выбирает Третье значение как Топ. Что алгоритм должен сделать, это:
sadrzajList.add("Third value");
sadrzajList.add("First value");
sadrzajList.add("Second value");
break;
for (int i=0; i<sadrzajList.size; i++)
vrijDomeneList.getItem(i).setValue(sadrzajList.getValue(i));