


六本木


本川越、蔵の街.





台場



清澄庭園 / Kiyosumi Garden.


1 2 3 | if (value.toUpperCase().equals("TRUE")) { return true; } |
1 2 3 4 5 6 | <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency> |
1 2 3 4 | String valueUpperCase = StringUtils.upperCase(value, Locale.ENGLISH); if(valueUpperCase.equals("TRUE")) { return true; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $scope.remove = function() { bootbox.confirm({ message:'是否確定要刪除', buttons: { confirm: { label: '確認' }, cancel: { label: '取消' } }, callback:function(isConfirmed) { if(isConfirmed) { // .... } } }); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $scope.remove = function() { bootbox.confirm({ message:'是否確定要刪除', buttons: { confirm: { label: '確認', className: 'btn-danger' }, cancel: { label: '取消', className: 'btn-primary' } }, callback:function(isConfirmed) { if(isConfirmed) { // .... } } }); }; |
1 2 3 4 5 6 7 | $scope.remove = function() { bootbox.confirm('是否確定要刪除', function(isConfirmed) { if(isConfirmed) { // .... } }); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $scope.remove = function() { bootbox.confirm({ message:'是否確定要刪除', buttons: { confirm: { label: '確認' }, cancel: { label: '取消' } }, callback:function(isConfirmed) { if(isConfirmed) { // .... } } }); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package albert.practice.mapStruct; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @AllArgsConstructor @NoArgsConstructor @Data @ToString public class DeliveryAddressDto { private String receiver; private String addressString; private String totalString; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package albert.practice.mapStruct; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @AllArgsConstructor @NoArgsConstructor @Data @ToString public class Person { private String firstName; private String lastName; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package albert.practice.mapStruct; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @AllArgsConstructor @NoArgsConstructor @Data @ToString public class Address { private String addressString; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package albert.practice.mapStruct; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @AllArgsConstructor @NoArgsConstructor @Data @ToString public class ShoppingItems { private Long total; } |
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 | package albert.practice.mapStruct.mapper; import org.mapstruct.DecoratedWith; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; import albert.practice.mapStruct.Address; import albert.practice.mapStruct.DeliveryAddressDto; import albert.practice.mapStruct.Person; import albert.practice.mapStruct.ShoppingItems; import albert.practice.mapStruct.decorator.AddressDecorator; @Mapper @DecoratedWith(AddressDecorator.class) public interface AddressMapper { // By convention, a mapper interface should define a member called INSTANCE // which holds a single instance of the mapper type: AddressMapper INSTANCE = Mappers.getMapper(AddressMapper.class); @Mapping(target = "totalString", source = "shoppingItems.total") @Mapping(target = "receiver", source = "person.lastName") @Mapping(target = "addressString", source = "address.addressString") DeliveryAddressDto covertPersonAndAddressToDeliveryAddressDto(Person person, Address address, ShoppingItems shoppingItems); } |
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 | package albert.practice.mapStruct.decorator; import java.text.DecimalFormat; import albert.practice.mapStruct.Address; import albert.practice.mapStruct.DeliveryAddressDto; import albert.practice.mapStruct.Person; import albert.practice.mapStruct.ShoppingItems; import albert.practice.mapStruct.mapper.AddressMapper; public class AddressDecorator implements AddressMapper { private final AddressMapper delegate; private DecimalFormat decimalFormat = new DecimalFormat("NT$#,###,###,##0"); public AddressDecorator(AddressMapper delegate) { this.delegate = delegate; } @Override public DeliveryAddressDto covertPersonAndAddressToDeliveryAddressDto(Person person, Address address, ShoppingItems shoppingItems) { DeliveryAddressDto dto = delegate.covertPersonAndAddressToDeliveryAddressDto(person, address, shoppingItems); dto.setReceiver(person.getFirstName() + " " + person.getLastName()); dto.setTotalString(decimalFormat.format(shoppingItems.getTotal())); return dto; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package albert.practice.mapStruct; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @AllArgsConstructor @NoArgsConstructor @Data @ToString public class Car { private String manufacturer; private int seatCount; private String mfgDateString; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package albert.practice.mapStruct; import java.util.Date; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @AllArgsConstructor @NoArgsConstructor @Data @ToString public class CarDto { private String make; private int numberOfSeats; private Date mfgDate; } |
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 31 32 | <properties> <org.mapstruct.version>1.1.0.Final</org.mapstruct.version> </properties> <dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher --> <version>${org.mapstruct.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <!-- or higher, depending on your project --> <target>1.8</target> <!-- or higher, depending on your project --> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build> |
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 | package albert.practice.mapStruct.mapper; import java.util.List; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; import albert.practice.mapStruct.Car; import albert.practice.mapStruct.CarDto; @Mapper(uses = MfgDateMapper.class) public interface CarMapper { // By convention, a mapper interface should define a member called INSTANCE // which holds a single instance of the mapper type: CarMapper CarMapper = Mappers.getMapper(CarMapper.class); @Mapping(target = "mfgDate", source = "mfgDateString") @Mapping(target = "make", source = "manufacturer") @Mapping(target = "numberOfSeats", source = "seatCount") CarDto convertCarToCarDto(Car car); @Mapping(target = "mfgDateString", source = "mfgDate") @Mapping(target = "manufacturer", source = "make") @Mapping(target = "seatCount", source = "numberOfSeats") Car convertCarDtoToCar(CarDto carDto); } |
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 31 32 33 34 35 | package albert.practice.mapStruct.mapper; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.google.common.base.Strings; public class MfgDateMapper { private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); public Date toDate(String dateString) throws ParseException { Date date = null; if (!Strings.isNullOrEmpty(dateString)) { try { date = dateFormat.parse(dateString); } catch (ParseException e) { throw e; } } return date; } public String toDateString(Date date) { String dateString = ""; if (date != null) { dateString = dateFormat.format(date); } return dateString; } } |
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package albert.practice.mapStruct; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.junit.Before; import org.junit.Test; import org.mapstruct.factory.Mappers; import albert.practice.mapStruct.mapper.CarMapper; import lombok.extern.slf4j.Slf4j; @Slf4j public class CarMapperTest { CarMapper carMapper; @Before public void setup() { carMapper = Mappers.getMapper(CarMapper.class); } @Test public void testConvertCarToCarDto() { Car car = new Car("Toyota Camry", 5, "2017-04-01"); CarDto carDto = carMapper.convertCarToCarDto(car); log.debug("[testConvertCarToCarDto] car = " + car.toString()); log.debug("[testConvertCarToCarDto] carDto = " + carDto.toString()); assertTrue(carDto.getMake().equals(car.getManufacturer())); assertTrue(carDto.getNumberOfSeats() == car.getSeatCount()); } @Test public void testConvertCarDtoToCar() { CarDto carDto = new CarDto("MINI Cooper S", 4, new Date()); Car car = carMapper.convertCarDtoToCar(carDto); log.debug("[testConvertCarDtoToCar] carDto = " + carDto.toString()); log.debug("[testConvertCarDtoToCar] car = " + car.toString()); assertTrue(car.getManufacturer().equals(carDto.getMake())); assertTrue(car.getSeatCount() == carDto.getNumberOfSeats()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $scope.gridCols = [ { field : 'no', displayName : '序號', width : '5%', cellClass : 'text-right' }, { field : 'exceptionGroup', displayName : '異常類別', width : '15%', cellClass : 'text-left' }, { field : 'exceptionDesc', displayName : '異常類別說明', width : '25%', cellClass : 'text-left' }, { field : 'deptName', displayName : '部門別', width : '15%', cellClass : 'text-left' }, { field : 'userName', displayName : '通報人員姓名', width : '10%', cellClass : 'text-left' }, { field : 'emailAddr', displayName : '收件Email', width : '30%', cellClass : 'text-left' } ]; $scope.dataGrid = { multiSelect : false, data : 'itemData', columnDefs : 'gridCols', enableColumnResize : true, keepLastSelected : false, enablePaging : true, showFooter : true, pagingOptions : $scope.pagingOptions, totalServerItems : "totalServerItems" }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 | // query result (current page) $scope.itemData = []; // query result (complete data) $scope.resultData = []; // set page sizes, page size and current page $scope.pagingOptions = { pageSizes : [ 25, 50, 100 ], pageSize : 25, currentPage : 1 }; // total items are on the server (initial value) $scope.totalServerItems = 0; |
1 2 3 4 5 6 7 8 9 | // set paging data $scope.setPagingData = function(data, page, pageSize) { var pagedData = data.slice((page - 1) * pageSize, page * pageSize); $scope.itemData = pagedData; $scope.totalServerItems = data.length; if (!$scope.$$phase) { $scope.$apply(); } }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 | // Registers a listener callback to be executed whenever the pagingOptions changes. $scope.$watch('pagingOptions', function(newVal, oldVal) { // if page size change, then set current page to 1 and set paging data if(newVal.pageSize !== oldVal.pageSize) { $scope.pagingOptions.currentPage = 1; $scope.setPagingData($scope.resultData, $scope.pagingOptions.currentPage, newVal.pageSize); } // if current page change, then set paging data if (newVal !== oldVal && newVal.currentPage !== oldVal.currentPage) { $scope.setPagingData($scope.resultData, newVal.currentPage, newVal.pageSize); } }, true); |