String compareTo 에 대해...
너무 오랜만에 글 쓰는거지만 맨날 까먹는거라서...
String a, b; 가 있는 경우
a > b 일 때는 a.compareTo(b) 의 결과는 1 이상.
a == b 일 때는 a.compareTo(b) 의 결과는 0.
a < b 일 때는 a.compareTo(b) 의 결과는 -1 이하.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
너무 오랜만에 글 쓰는거지만 맨날 까먹는거라서...
String a, b; 가 있는 경우
a > b 일 때는 a.compareTo(b) 의 결과는 1 이상.
a == b 일 때는 a.compareTo(b) 의 결과는 0.
a < b 일 때는 a.compareTo(b) 의 결과는 -1 이하.
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
이렇게 쓰는 용도는 매크로 본문부가 반복이 되는 경우 해당 본문부에 파라미터를 매크로를 정의할 때 넘겨주게 설정할 때 사용하게 된다. (음;;;)
일단 이해했으니... 정리가 되면 고쳐야겠다.
참고자료: http://freemarker.org/docs/dgui_misc_userdefdir.html
2014/04/26 - [JAVA/Alfresco] - Web Scripts 에서 Request Header 조회하기
2014/04/27 - [JAVA/Alfresco] - Web Scripts 에서 모바일 기기 체크하기
2014/04/28 - [JAVA/Alfresco] - Web Scripts 에서 Cookie 에 접근하기
이번에는 세션에 접근할 수 있도록 기능을 추가하고 내부 개선작업을 진행했다.
이번에 추가된 함수는 setSession(), getSession(), removeSession() 이다.
테스트 결과 정상적으로 동작하는 것을 확인했다.
2014/04/26 - [JAVA/Alfresco] - Web Scripts 에서 Request Header 조회하기
2014/04/27 - [JAVA/Alfresco] - Web Scripts 에서 모바일 기기 체크하기
지난 포스팅에서 정리했던 Web Scripts 스크립트 헬퍼 부분에 쿠키에 접근하는 로직을 추가하였다.
사용법은 아래와 같다.
2014/04/26 - [JAVA/Alfresco] - Web Scripts 에서 Request Header 조회하기
이전 글에서는 Alfresco Web Scripts 에서 Header 를 조회하는 방식을 알아보았다. 이번 글에서는 User-Agent 를 조사하여 모바일 기기인지를 체크하는 방법을 설명한다.
getMobileDevice() 함수와 isMobile() 함수가 추가되었으며, 사용법은 아래와 같다.
Template component 로 Web Scripts 에서 Request 헤더에 쉽게 접근할 수 있는 방법이 보이지 않았다.
(그냥 컴포넌트를 요청하면 헤더를 사용할 수 있는데...)
그리하여 요리조리 테스트해보면서 아래와 같은 헬퍼클래스를 만들었다.
사용법은 아래와 같다.
Alfresco 는 CMIS 이다. CMIS 를 대상으로 컨텐츠 모델링을 할 때는 일반 RDB 모델링 하듯이 하면 완전 피본다는 것을 뼈저리게 느끼고 있다.
일단, JOIN 이 지원되지 않는다는 것은 타격이 크다. SOLR 은 4.0 이상 부터 JOIN 을 지원하는데, Alfresco 4.0 에서는 SOLR 1.4 버전을 사용한다. CMIS Query 에서 JOIN 을 제공해주는 예제를 확인하여 테스트를 해보았으나 커스텀 타입의 데이터 모델은 "Advanced join is not supported" 익셉션만 뱉을 뿐이다...
검색을 하다가 찾은 내용인데, 안습...
The bottom-line is that Alfresco isn't relational. You can set up associations and through the API you can ask a give node for its associations, but you cannot run queries across associations like you can when you do joins in a relational database.
Maybe you should add a location property to your content node and update its value with a behavior any time an association is created, updated, or deleted on that node. Then you'd be able to run a query by AND-ing the location with other criteria on the node.
Obviously, if you have many such properties that you need to keep in sync your behavior could start to affect performance negatively, but if you have only a handful you should be okay.
출처: http://stackoverflow.com/questions/11193275/alfresco-solr-custom-search
대충 내용은 Alfresco 는 relational 하지 않다. RDB 처럼 join 을 할 수 없다. 노드의 생성, 갱신, 삭제 시에 관련 프로퍼티를 업데이트 해주어야 한다. 이 것은 성능에 부정적인 영향을 끼친다. 얼마 안되는 정도라면 괜찮다.
결국, behaviour 를 이용하여 업데이트 하는 방법은 절대 절대 피해야 하는데 방법이 보이질 않는다...
SOLR 을 4.0 으로 올릴 수는 없을까?
[ALFRESCO_HOME]/webapps/alfresco/WEB-INF/classes/log4j.properties
###### File appender definition #######
log4j.appender.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File=alfresco.log
log4j.appender.File.Append=true
log4j.appender.File.DatePattern='.'yyyy-MM-dd
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
[ALFRESCO_HOME]/webapps/awe/WEB-INF/classes/log4j.properties
###### File appender definition #######
log4j.appender.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File=awe.log
log4j.appender.File.Append=true
log4j.appender.File.DatePattern='.'yyyy-MM-dd
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
[ALFRESCO_HOME]/webapps/solr/WEB-INF/classes/log4j.properties
###### File appender definition #######
[ALFRESCO_HOME]/webapps/wcmqs/WEB-INF/classes/log4j.xml
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="webquickstart.log" />
<param name="Append" value="true" />
<param name="Encoding" value="UTF-8" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] %m%n" />
</layout>
</appender>
UI 를 구성하는 Web Scripts 는 request 나 response 객체에 접근이 어렵기 때문에 Web Scripts 내에서 redirect 를 하려면 약간의 꼼수를 이용해야 한다.
Response Status 를 이용하는 꼼수인데, Response Status 로 핸들링하는 예제는 아래 더보기를 통해 확인할 수 있다.
이번 포스팅에서 사용하는 방식은 "Package level template named <format>.status.ftl" 으로 사용하는 Web Scripts 와 같은 패키지(디렉토리)에 위치시키고 js 파일에서 status 를 제어하여 redirect 를 시킬 것이다.
/alfresco/web-extension/site-webscripts/test/package/test.content.get.js
위에서 redirectCondition 이 true 이면, status.code 에 899 값을 설정하고, status.location 에는 redirect 할 url 을, status.redirect 는 true 로 설정을 하고 실행하는 함수 자체를 return 시켜서 아래 코드가 실행되지 않도록 한다.
/alfresco/web-extension/site-webscripts/test/package/html.status.ftl
html.status.ftl 은 "/alfresco/web-extension/site-webscripts/test/package/" 하위에 있는 *.html.ftl 에서 status 값이 설정되면 해당 페이지로 리다이렉트하게 된다.
잘만 이용하면 다양한 기능을 활용할 수 있을 듯 하다.
파라미터로 long 형 timestamp 를 넘겨주면,
1분 이내는 방금
1시간 이내는 ~분 전
하루 이내는 ~시간 전
나머지는 날짜 출력
=ㅁ= //