사용하기 전에 몇가지 제약이 존재하는듯.

1. google account 가 있어야 한다.
2. google calendar "모바일 설정"에서 자신의 phone number 인증을 받아야 한다.
3. 인증 받은 후 내 킬린더의 SMS 수신 여부를 설정해야 함.
4. gdata-src.java-1.40.0.zip 다운로드 받고.. lib 목록에 추가해야함.
5. 잘 사용해서 만들어 주면 땡.

sample
- 우선은 구글 계정 정보(id, pw)를 알아야 SMS를 전송할 수 있다.
- title에 입력된 데이터가 SMS로 전송된다.
- title이 길면 여러개로 쪼개져서 오기 때문에 받아보기 귀찮음. 알아서 사이즈를 맞춰야 할듯.

package google.sms;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.Date;

import com.google.gdata.client.calendar.CalendarService;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.calendar.CalendarEntry;
import com.google.gdata.data.calendar.CalendarEventEntry;
import com.google.gdata.data.calendar.CalendarFeed;
import com.google.gdata.data.extensions.Reminder;
import com.google.gdata.data.extensions.When;
import com.google.gdata.data.extensions.Reminder.Method;
import com.google.gdata.util.ServiceException;

public class Launcher {

 String id = "id@gmail.com";
 String pw = "password";
 String calendarName = "SMS";
 
 public void test() throws IOException, ServiceException {
  CalendarService service = new CalendarService("sms notify");
 
  service.setUserCredentials(id, pw);

  String title = "문자 테스트 잘 받아보아라...11";
  String description = "테스트입니다.2";
 
  URL metafeedUrl = new URL("http://www.google.com/calendar/feeds/default/allcalendars/full");
  CalendarFeed resultFeed = service.getFeed(metafeedUrl, CalendarFeed.class);
  List entries = resultFeed.getEntries();
 
  for (int i = 0; i < entries.size(); i++) {
   CalendarEntry entry = (CalendarEntry)entries.get(i);
   String currCalendarName = entry.getTitle().getPlainText();
   System.out.println("\t" + currCalendarName);
 
   if (currCalendarName.equals(calendarName)) {
    sendDowntimeAlert(service, entry, title, description);
   }
  }
 
  System.out.println("\nTotal Entries: " + entries.size());

 }
 
 private void sendDowntimeAlert(CalendarService myService,
         CalendarEntry entry,
         String title,
         String description) throws IOException,
  ServiceException {
 
  String postUrlString = entry.getLink("alternate", "application/atom+xml").getHref();
 
  URL postUrl = new URL(postUrlString); //was: "http://www.google.com/calendar/feeds/jo@gmail.com/private/full"
 
  CalendarEventEntry myEntry = new CalendarEventEntry();
 
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(description));
 
  Date now = new Date();
 
  // 이거는 뭐.. 시간이 우떻게 되는 거임?? 도통..
  Long tzOffset = new Double(Double.parseDouble("9")).longValue() * 60 * 60 * 1000 + 1000 * 5;
 
  Date startDate = new Date(now.getTime());
  Date endDate = new Date(now.getTime());
  
 
  DateTime startTime  = new DateTime(startDate.getTime()  + tzOffset);
  DateTime endTime  = new DateTime(endDate.getTime()  + tzOffset);
 
  When eventTimes = new When();
  eventTimes.setStartTime(startTime);
  eventTimes.setEndTime(endTime);
  myEntry.addTime(eventTimes);
 
  // Send the request and receive the response:
  CalendarEventEntry insertedEntry = myService.insert(postUrl, myEntry);
  System.err.println("Got response for: "+insertedEntry.getTitle().getPlainText());
 
  for(When when : insertedEntry.getTimes()) {
   System.err.println("When: "+when.getStartTime()+" to "+when.getEndTime());
  }
 
  Reminder reminder = new Reminder();
  reminder.setMinutes(0);
  reminder.setMethod(Method.SMS);
  insertedEntry.getReminder().add(reminder);
  insertedEntry.update();
 }
 
 public static void main(String[] args) {
  try {
   new Launcher().test();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (ServiceException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

Posted by 짱가쟁이
1. 서비스 시간, 대기 시간, 처리량, 효율성, 확장성, 용량 등
  : 서비스 시간 과 대기 시간은 특정 작업을 처리하는 속도가 "얼마나 빠르냐"를 말한다.
  : 용량 과 처리량은 동일한 자원을 갖고 있을때 "얼마나 많은" 양의 일을 할 수 있는지를 말한다.
Posted by 짱가쟁이
invokeAll() 을 사용해서 모든 작업이 종료되기를 기다리는 방법도 있지만.. awaitTermination() 를 사용해서 설정된 시간만큼 작업이 종료 되기를 기다리는 방법도 있다.

나름 쓸만한 기능들이 많은듯 싶은데 이거 정말 성능면에서 뛰어 나기는 한걸까? 조금 의문이 듬.

AwaitTerminationTest.java
package study.concurrency.tmp;

import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class AwaitTerminationTest {

 ExecutorService exec       = Executors.newCachedThreadPool();
 final Queue<String> resultQueue    = new ConcurrentLinkedQueue<String>();
 
 public void test() throws InterruptedException {
  for(int i = 0;i<10;i++)
   exec.execute(new WorkerTask(resultQueue));
  
  exec.shutdown();
 
  // 설정한 시간까지 모든 작업이 종료되기를 기다린다.
  // 설정한 시간이 지나면 해당 스레드는 interrupted 된다.
  boolean isTeminated = exec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
 
  // 해당 작업이 종료된 후 출력된다.
  System.out.println("is teminated : " + isTeminated);
 
  for(String s : resultQueue) {
   System.out.println(resultQueue.poll());
  }
 
 }
 
 public static void main(String[] args) {
  try {
   new AwaitTerminationTest().test();
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

WorkerTask.java
package study.concurrency.tmp;

import java.util.Collection;

public class WorkerTask implements Runnable {
 
 final Collection<String> resultQueue;
 
 WorkerTask(final Collection<String> resultQueue) {
  this.resultQueue = resultQueue;
 }
 
 public void run() {
  // TODO Auto-generated method stub
  for(int i = 0;i<5;i++) { 
   resultQueue.add(Thread.currentThread().getName() + " : ["+ i +"]");
   try {
    Thread.sleep(500);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }

}    

Posted by 짱가쟁이
흠.. 3.5 버전으로 작업함. 3.6 부터는 밑에 코드를 사용할 수 없음. 사용할 수 없는 클래스가 존재하는 듯..

참조

오피스 버전에 따라서 사용하는 API가 다름.
   : 2007 을 기준으로( ooo.xls, ooo.xlsx)
 
본 문서는 ooo.xls 버전을 기준으로 작업할거임. 뭐.. 상위 버전이랑 큰 차이는 없는듯


1. workbook.xls 만들기
package com.excel.sample;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class Launcher {

 final static int rowNumber  = 100;
 
 public void makeRowHeader(CreationHelper createHelper, Sheet sheet) {
  Row row = sheet.createRow(0);
 
  row.createCell(0).setCellValue(createHelper.createRichTextString("번호"));
     row.createCell(1).setCellValue(createHelper.createRichTextString("value"));
     row.createCell(2).setCellValue(createHelper.createRichTextString("Description(설 명)"));
     row.createCell(3).setCellValue(createHelper.createRichTextString("상태 값"));
     row.createCell(4).setCellValue(createHelper.createRichTextString("Date - new Date()"));
     row.createCell(5).setCellValue(createHelper.createRichTextString("Date - m/d/yy h:mm"));
     row.createCell(6).setCellValue(createHelper.createRichTextString("Date - Calendar.getInstance()"));
   
     row.createCell(7).setCellValue(createHelper.createRichTextString("Date - 비고"));
 }
 
 public void makeRow(Workbook wb, CreationHelper createHelper, Sheet sheet) {
  for(int i = 1;i<rowNumber;i++) {
   Row row = sheet.createRow(i);
  
   Cell cell = row.createCell(0);
      cell.setCellValue(1);
      row.createCell(1).setCellValue(1.2);
      row.createCell(2).setCellValue(createHelper.createRichTextString("This is a string"));
      row.createCell(3).setCellValue(true);
    
      row.createCell(4).setCellValue(new Date());
    
      // we style the second cell as a date (and time).  It is important to
      // create a new cell style from the workbook otherwise you can end up
      // modifying the built in style and effecting not only this cell but other cells.
      CellStyle cellStyle = wb.createCellStyle();
      cellStyle.setDataFormat(
          createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
      cell = row.createCell(5);
      cell.setCellValue(new Date());
      cell.setCellStyle(cellStyle);

    
      //you can also set date as java.util.Calendar
      cell = row.createCell(6);
      cell.setCellValue(Calendar.getInstance());
      cell.setCellStyle(cellStyle);
    
    
      row.createCell(7).setCellType(HSSFCell.CELL_TYPE_ERROR);
    
  }
 }
 
 public void makeExcel() throws IOException {
  Workbook wb = new HSSFWorkbook();

  CreationHelper createHelper = wb.getCreationHelper();
  Sheet sheet = wb.createSheet("sheet1");
     
  makeRowHeader(createHelper, sheet);
 
  makeRow(wb, createHelper, sheet);
 
 

   
     FileOutputStream fileOut;
     fileOut = new FileOutputStream("D:\\Launcher\\excel\\workbook.xls");

  wb.write(fileOut);
  fileOut.close();
 }
 
 public static void main(String[] args) throws IOException {
 
  new Launcher().makeExcel();
 }
}
 
2. 만든넘 읽기.
public void readExcel() throws InvalidFormatException, IOException {
InputStream inp = new FileInputStream("D:\\Launcher\\excel\\workbook.xls");

   Workbook wb = WorkbookFactory.create(inp);
   Sheet sheet = wb.getSheetAt(0);

   for(Row row : sheet) {
    for(Cell cell : row) {
     CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
     System.out.print(cellRef.formatAsString());
     System.out.print(" - ");
     switch(cell.getCellType()) {
      case Cell.CELL_TYPE_STRING:
             System.out.println("string : " + cell.getRichStringCellValue().getString());
             break;
           case Cell.CELL_TYPE_NUMERIC:
             if(DateUtil.isCellDateFormatted(cell)) {
               System.out.println("date : " + cell.getDateCellValue());
             } else {
               System.out.println("number : " + cell.getNumericCellValue());
             }
             break;
           case Cell.CELL_TYPE_BOOLEAN:
             System.out.println("boolean : " + cell.getBooleanCellValue());
             break;
           case Cell.CELL_TYPE_FORMULA:
             System.out.println("formula : " + cell.getCellFormula());
             break;
           default:
             System.out.println(cell.toString());
     }
    }
   }
}

3.6이상 부터는 위 코드를 사용할 수 없었음.. 뭐.. 소스를 다운로드 받으면 그 속에 예제가 있기 때문에 그것보고 사용해도 좋을듯.

'java > excel' 카테고리의 다른 글

[excel] - Apache POI를 사용해서 office2007 가지고 놀기  (0) 2010.06.30
Posted by 짱가쟁이
/**
  *
  * @param command
  *     ex> "java -jar jface/util/tool/trang.jar D:\\runtest\\tableconfig.xml D:\\runtest\\TableConfig.xsd"
  */
 public void launcher(String command) {
 
  try {
   String s;
   String error = "";
  
   Process process = new ProcessBuilder("cmd", "/c", command).start();
  
   // 외부 프로그램 출력 읽기
      BufferedReader stdOut   =
       new BufferedReader(new InputStreamReader(process.getInputStream()));
      BufferedReader stdError =
       new BufferedReader(new InputStreamReader(process.getErrorStream()));
 
      // "표준 출력"과 "표준 에러 출력"을 출력
      while ((s =   stdOut.readLine()) != null) {
       System.out.print(s);
      }
      while ((s = stdError.readLine()) != null) {
       error = error + s;      
      }
 
      if(process.exitValue() == 0) {
       MessageDialog.openInformation(parent.getParent().getShell(),
         "XSD generate", parent.getXsdLocationText().getText() + " 를 생성했습니다.");
      } else {
       MessageDialog.openInformation(parent.getParent().getShell(),
         "XSD generate", error + "\n\n" + parent.getXsdLocationText().getText() + " 생성에 실패했습니다.");
      }

  } catch(Exception e) {
   e.printStackTrace();
  }
 }

'java > util' 카테고리의 다른 글

[java] - base54 String decode  (0) 2010.06.30
[java] - 타입 변환  (0) 2010.06.30
[java] - byte array to int  (0) 2010.06.29
[java] - int to byte array  (0) 2010.06.29
[java] - Big Endian to Little Endian  (0) 2010.06.29
Posted by 짱가쟁이
리플렉션은 프로그램이 자신의 모습을 보고 수정하는 행위.
 
ex> Spring 의 DI(dependecy injection)

Example
Class<?> dymClass = null;
Method dymMethod  = null;

try {

    // 다이나믹 클래스 인스턴스 생성
    dymClass  = Class.forName(child.getListener());
    Object obj  = dymClass.newInstance();
 
    dymMethod = obj.getClass().getMethod("setShell", new Class[]{Shell.class});
  
    dymMethod.invoke(obj, new Object[]{parent.getShell()});
    toolItem.addListener(SWT.Selection, ((Listener)obj));
      
    toolItemMap.put(child.getId(), toolItem);
     
} catch(Exception e) {

}

Posted by 짱가쟁이
jdbc.driverClassName=sun.jdbc.odbc.JdbcOdbcDriver

jdbc.url=jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=config/db.mdb
jdbc.username=Admin
jdbc.password=

jdbc.maxActive=20
jdbc.maxIdle = 5
jdbc.maxWait = 10000

Posted by 짱가쟁이
<script src="http://java.com/js/deployJava.js"></script>

<script>
 if (deployJava.isPluginInstalled()) {
  if (!deployJava.versionCheck('1.6.0_10+')) {
   deployJava.installJRE('1.6.0_10+');
  }
 } else {
  deployJava.installLatestJRE();
 }
</script>

요 스크립트를 추가하면 .. JRE 다운로드 페이지로 자동이동 됨.
Posted by 짱가쟁이
public static int byteToInt(byte[] src) {

        int newValue = 0;

        newValue |= (((int)src[0])<<24)&0xFF000000;
        newValue |= (((int)src[1])<<16)&0xFF0000;
        newValue |= (((int)src[2])<<8)&0xFF00;
        newValue |= (((int)src[3]))&0xFF;

        DebugPrint.writeDebug("aaaa : " + newValue);
      
        return newValue;
}

'java > util' 카테고리의 다른 글

[java] - 타입 변환  (0) 2010.06.30
[java] - 외부 프로그램 실행하기..  (0) 2010.06.29
[java] - int to byte array  (0) 2010.06.29
[java] - Big Endian to Little Endian  (0) 2010.06.29
[java] - Little Endian to Big Endian  (0) 2010.06.29
Posted by 짱가쟁이
public static byte[] intTobyte(int value) {
        byte[] bytes=new byte[4];
        bytes[0]=(byte)((value&0xFF000000)>>24);
        bytes[1]=(byte)((value&0x00FF0000)>>16);
        bytes[2]=(byte)((value&0x0000FF00)>>8);
        bytes[3]=(byte) (value&0x000000FF);


        return bytes;

}

'java > util' 카테고리의 다른 글

[java] - 외부 프로그램 실행하기..  (0) 2010.06.29
[java] - byte array to int  (0) 2010.06.29
[java] - Big Endian to Little Endian  (0) 2010.06.29
[java] - Little Endian to Big Endian  (0) 2010.06.29
[java] - float to byte array  (1) 2010.06.29
Posted by 짱가쟁이