- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
static String asHex(int i){
return
Joiner.on( " " ).join(
Splitter.fixedLength( 4 ).split(
String.format("%s8", Integer.toHexString(i))
.replace(' ', '0')
)
);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+174
static String asHex(int i){
return
Joiner.on( " " ).join(
Splitter.fixedLength( 4 ).split(
String.format("%s8", Integer.toHexString(i))
.replace(' ', '0')
)
);
}
LINQ-мышление в жабе.
+69
String response = HttpLoader.loadString(params[0]);
Gson gson = new GsonBuilder().registerTypeAdapter(ArrayList.class,
new JsonCollectionSerializer<ArrayList<MyClass>>()).
create();
ArrayList<MyClass> items_generic = new ArrayList<MyClass>() { };
ArrayList<MyClass> items = gson.fromJson(response, items_generic.getClass().getGenericSuperclass());
return items;
public class JsonCollectionSerializer<E> implements
JsonSerializer<Collection<E>>, JsonDeserializer<Collection<E>> {
@SuppressWarnings("unchecked")
public Collection<E> deserialize(JsonElement element, Type type,
JsonDeserializationContext context) throws JsonParseException {
JsonArray items = element.getAsJsonArray();
ParameterizedType deserializationCollectionType = ((ParameterizedType) type);
Type collectionItemType = deserializationCollectionType.getActualTypeArguments()[0];
Collection<E> list = null;
try {
list = (Collection<E>) ((Class<?>) deserializationCollectionType.getRawType()).newInstance();
for (JsonElement e : items) {
list.add((E) context.deserialize(e, collectionItemType));
}
} catch (InstantiationException e) {
throw new JsonParseException(e);
} catch (IllegalAccessException e) {
throw new JsonParseException(e);
}
return list;
}
}
Жабоблядство и шаблоны и генерики:
Чтение из json в коллекцию с шаблонным параметризованным типом.
+71
private byte[] readBytes(InputStream pInputStream, int pLength, int pRetryCounter) throws IOException, WhateverException
{
byte[] bytes = new byte[pLength];
int bytesRead= pInputStream.read(bytes, 0,pLength);
if (bytesRead == -1)
{
throw new WhateverException("End of InputStream has been reached");
}
if (pLength != bytesRead)
{
byte[] bytesReadNextAttempt = readBytes(pInputStream, pLength-bytesRead, pRetryCounter + 1);
if (pLength != bytesRead + bytesReadNextAttempt.length)
{
// less bytes available; connection was closed
throw new WhateverException( ... );
}
System.arraycopy(bytesReadNextAttempt, 0, bytes, bytesRead, bytesReadNextAttempt.length);
}
return bytes;
}
поддержка паршиал ресив. такого "метода" я еще не видел.
ЗЫ а че в жабе нету никакого MSG_WAITALL?
+80
if (!getBaseContext().getResources().getConfiguration().locale.getLanguage().equals(((ApplicationController)getApplication()).lang) )
((ApplicationController)getApplication()).setLocale(((ApplicationController)getApplication()).lang);
Ехал дроид через дроид, видит дроид дроид дроид
+79
if(VovaJSONparser.ParseText(d, text))
{
return d;
}
Вова, фас!
+73
public enum Action {
ADD, DELETE, UPDATE, REFRESH;
public static Action getEnum(String value) {
for (Action current : values()) {
if (current.name().equalsIgnoreCase(value)) {
return current;
}
}
throw new IllegalArgumentException("Unknown input value. Input value is '" + value + "'");
}
@Override
public String toString() {
return this.name().toLowerCase();
}
}
public enum Manager {
USER, ROLE, SERVICE;
public static Manager getEnum(String value) {
for (Manager current : values()) {
if (current.name().equalsIgnoreCase(value)) {
return current;
}
}
throw new IllegalArgumentException("Unknown input value. Input value is '" + value + "'");
}
@Override
public String toString() {
return this.name().toLowerCase();
}
public boolean isUser() {
return this == USER;
}
public boolean isRole() {
return this == ROLE;
}
public boolean isService() {
return this == SERVICE ;
}
}
public class StringToEnumConverterFactory implements ConverterFactory<String, Enum> {
@Override
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
return new StringToEnumConverter<T>(targetType);
}
private final class StringToEnumConverter<T extends Enum> implements Converter<String, T> {
private Class<T> enumType;
private StringToEnumConverter(Class<T> enumType) {
this.enumType = enumType;
}
@Override
public T convert(String source) {
if (enumType.getName().equalsIgnoreCase("com.finder.enumerator.manager")) {
return (T) Manager.getEnum(source);
}
if (enumType.getName().equalsIgnoreCase("com.finder.enumerator.action")) {
return (T) Action.getEnum(source);
}
return (T) Enum.valueOf(this.enumType, source);
}
}
}
/* -- Mapping -- */
@RequestMapping(value = "manage/index/{manager}/{action}", method = RequestMethod.GET)
public String addValueToEntity(@PathVariable("manager") Manager manager, @PathVariable("action") Action action) {
...
@RequestMapping(value = "/manage/index", method = RequestMethod.GET)
public String indexPage(ModelMap model, @RequestParam(value = "manager", required = true) Manager manager) {
...
Spring MVC. Проблема в том что строка lovercase а значения Enum-ов uppercase
+142
public class PDFVPage
{
....
public int GetX()
{
return m_x;
}
public int GetY()
{
return m_y;
}
Либа Android PDF :)
+70
package gargoyle.heartsong.pages.test;
import gargoyle.heartsong.annotations.model.InjectDAO;
import gargoyle.heartsong.model.UserEntity;
import gargoyle.heartsong.services.model.i.DAO;
import java.util.List;
public class TestDAO2 {
@InjectDAO(key = Integer.class, value = UserEntity.class)
private DAO<Integer, UserEntity> users;
public List<UserEntity> getUsers() {
return this.users.all();
}
}
дай Люру в руки Tapestry, так он станет программировать на аннотациях.
это вам уже не программирование "на стрелочках", болезнь прогрессирует.
да, аннотация @CommitAfter оборачивает тело метода в транзакцию с коммитом и роллбэком при исключении;
есть аннотация @Notify, которая показывает уведомление, если была ошибка, и меняет возвращаемое значение;
по аннотациям @AdminPage строится меню админки;
и наконец, @RolesRequired ограничивает доступ к странице.
в итоге в классах одни собачки торчат вместо фунциональности. вот, убедитесь сами:
https://github.com/lure0xaos/HeartSong.git
+83
// java.io.FilterOutputStream
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}
// тестовый код
try (OutputStream os = new BufferedOutputStream(new FileOutputStream("/tmp/little_virtual_fs/1.txt"))) {
byte[] buf = new byte[2028544];
os.write(buf, 0, 2028544); // максимальный размер файла, который влезает на нашу фс
os.write(buf, 0, 5); // и еще немножко
//os.flush();
}
А сейчас, на арене нашего цирка - очередная жабопроблема!
Как думаете, каков результат выполнения тестовой программы?
Запишет 2028549 байт? Хрен там, места маловато.
Выдаст IOException на write()? Хрен там, буферизация.
Выдаст IOException на close()? Хрен там, его сожрала реализация FilterOutputStream.
Результат: файл не дописался, исключения нет.
Решение: всегда дергать flush() перед close() самому или не юзать буферизованный поток.
+71
@Override
List search(Long ownerId, Long projectId, String docnumber, String ctr1, String ctr2, Long dateFrom, Long dateTo, String contract,
Double amountFrom, Double amountTo, Double vatAmountFrom, Double vatAmountTo, Double withVatAmountFrom,
Double withVatAmountTo, Boolean defect, DocumentDefect d, Long vatId, Integer limit, String sortField, String order, String docType) {
// доступные проекты
List projects = projectDAO.findAll(ownerId)
if(!projects){
logger.warn("Ошибка отображения списка документов: нет доступных проектов: ownerId:$ownerId")
return []
}
Criteria criteria = currentSession.createCriteria(DocumentView)
.createAlias("document", "d")//
.createAlias("d.project", "p")//
.add(Restrictions.in("p.id", projects.id))//
// if(projectId)
// criteria.add(Restrictions.eq("d.project.id", projectId))
if (docnumber)
criteria.add(Restrictions.ilike("docNumber", docnumber, MatchMode.ANYWHERE))
if (ctr1)
criteria.add(Restrictions.ilike("supplierName", ctr1, MatchMode.ANYWHERE))
if (ctr2)
criteria.add(Restrictions.ilike("customerName", ctr2, MatchMode.ANYWHERE))
if (dateFrom) {
Calendar date1 = Calendar.instance
date1.setTime(new Date(dateFrom))
criteria.add(Restrictions.ge("docDate", date1))
}
if (dateTo) {
Calendar date1 = Calendar.instance
date1.setTime(new Date(dateTo))
date1.add(Calendar.DAY_OF_MONTH, 1)
criteria.add(Restrictions.lt("docDate", date1))
}
if (contract)
criteria.add(Restrictions.ilike("contract", contract, MatchMode.ANYWHERE))
if (amountFrom)
criteria.add(Restrictions.ge("amount", amountFrom))
if (amountTo)
criteria.add(Restrictions.le("amount", amountTo))
if (vatAmountFrom)
criteria.add(Restrictions.ge("vatAmount", vatAmountFrom))
if (vatAmountTo)
criteria.add(Restrictions.le("vatAmount", vatAmountTo))
if (withVatAmountFrom)
criteria.add(Restrictions.ge("totalAmount", withVatAmountFrom))
if (withVatAmountTo)
criteria.add(Restrictions.le("totalAmount", withVatAmountTo))
if (defect) {
criteria.add(Restrictions.isNotNull("defect"))
if (d)
criteria.add(Restrictions.eq("defect", d))
}
// if (vatId)
// criteria.add(Restrictions.eq("d.", withVatAmountTo))
if (docType) {
def dt = DocumentType.values().find { it.link == docType || it.code == docType }
if (dt)
criteria.add(Restrictions.like("docLink", dt.code, MatchMode.START))
else
logger.error("Неправильное значение параметра фильтрации по виду документа [d_t:$docType]. Допустимые значения ${DocumentType.values().code}")
}
// получаем общее кол-во записей без ограничений по странице
def rowCount = criteria.setProjection(Projections.rowCount()).uniqueResult() as Integer
List result = criteria.setProjection(null)//
.setResultTransformer(Criteria.ROOT_ENTITY)//
.addOrder(Order."$order"(sortField))//
.setMaxResults(limit)//
.list()
[rowCount, result]
}
поиск ?!